diff mbox

[net,v1,1/1] tipc: fix variable dereference before NULL check

Message ID 1470830854-4072-1-git-send-email-parthasarathy.bhuvaragan@ericsson.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Parthasarathy Bhuvaragan Aug. 10, 2016, 12:07 p.m. UTC
In commit cf6f7e1d5109 ("tipc: dump monitor attributes"),
I dereferenced a pointer before checking if its valid.
This is reported by static check Smatch as:
net/tipc/monitor.c:733 tipc_nl_add_monitor_peer()
     warn: variable dereferenced before check 'mon' (see line 731)

In this commit, we check for a valid monitor before proceeding
with any other operation.

Fixes: cf6f7e1d5109 ("tipc: dump monitor attributes")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Parthasarathy Bhuvaragan <parthasarathy.bhuvaragan@ericsson.com>
---
 net/tipc/monitor.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

David Miller Aug. 11, 2016, 12:57 a.m. UTC | #1
From: Parthasarathy Bhuvaragan <parthasarathy.bhuvaragan@ericsson.com>
Date: Wed, 10 Aug 2016 14:07:34 +0200

> In commit cf6f7e1d5109 ("tipc: dump monitor attributes"),
> I dereferenced a pointer before checking if its valid.
> This is reported by static check Smatch as:
> net/tipc/monitor.c:733 tipc_nl_add_monitor_peer()
>      warn: variable dereferenced before check 'mon' (see line 731)
> 
> In this commit, we check for a valid monitor before proceeding
> with any other operation.
> 
> Fixes: cf6f7e1d5109 ("tipc: dump monitor attributes")
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> Signed-off-by: Parthasarathy Bhuvaragan <parthasarathy.bhuvaragan@ericsson.com>

Applied, thank you.
diff mbox

Patch

diff --git a/net/tipc/monitor.c b/net/tipc/monitor.c
index b62caa1c770c..ed97a5876ebe 100644
--- a/net/tipc/monitor.c
+++ b/net/tipc/monitor.c
@@ -728,12 +728,13 @@  int tipc_nl_add_monitor_peer(struct net *net, struct tipc_nl_msg *msg,
 			     u32 bearer_id, u32 *prev_node)
 {
 	struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
-	struct tipc_peer *peer = mon->self;
+	struct tipc_peer *peer;
 
 	if (!mon)
 		return -EINVAL;
 
 	read_lock_bh(&mon->lock);
+	peer = mon->self;
 	do {
 		if (*prev_node) {
 			if (peer->addr == *prev_node)