Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=81dcd1690697efbdf8126e78fbbf7c76d359377f
Commit:     81dcd1690697efbdf8126e78fbbf7c76d359377f
Parent:     8d5cf596d10d740b69b5f4bbdb54b85abf75810d
Author:     Ralf Baechle <[EMAIL PROTECTED]>
AuthorDate: Thu Dec 14 15:50:34 2006 -0800
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Sun Dec 17 21:59:09 2006 -0800

    [AX.25]: Fix unchecked ax25_listen_register uses
    
    Fix ax25_listen_register to return something that's a sane error code,
    then all callers to use it.
    
    Signed-off-by: Ralf Baechle <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 net/ax25/ax25_iface.c |    7 ++++---
 net/netrom/nr_dev.c   |   24 ++++++++++++++++++------
 net/rose/af_rose.c    |    3 ++-
 3 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/net/ax25/ax25_iface.c b/net/ax25/ax25_iface.c
index dd9b7fe..51e2934 100644
--- a/net/ax25/ax25_iface.c
+++ b/net/ax25/ax25_iface.c
@@ -154,7 +154,7 @@ int ax25_listen_register(ax25_address *callsign, struct 
net_device *dev)
                return 0;
 
        if ((listen = kmalloc(sizeof(*listen), GFP_ATOMIC)) == NULL)
-               return 0;
+               return -ENOMEM;
 
        listen->callsign = *callsign;
        listen->dev      = dev;
@@ -164,7 +164,7 @@ int ax25_listen_register(ax25_address *callsign, struct 
net_device *dev)
        listen_list  = listen;
        spin_unlock_bh(&listen_lock);
 
-       return 1;
+       return 0;
 }
 
 EXPORT_SYMBOL(ax25_listen_register);
@@ -225,7 +225,8 @@ int ax25_listen_mine(ax25_address *callsign, struct 
net_device *dev)
 
        spin_lock_bh(&listen_lock);
        for (listen = listen_list; listen != NULL; listen = listen->next)
-               if (ax25cmp(&listen->callsign, callsign) == 0 && (listen->dev 
== dev || listen->dev == NULL)) {
+               if (ax25cmp(&listen->callsign, callsign) == 0 &&
+                   (listen->dev == dev || listen->dev == NULL)) {
                        spin_unlock_bh(&listen_lock);
                        return 1;
        }
diff --git a/net/netrom/nr_dev.c b/net/netrom/nr_dev.c
index 9b8eb54..4700d52 100644
--- a/net/netrom/nr_dev.c
+++ b/net/netrom/nr_dev.c
@@ -128,25 +128,37 @@ static int nr_header(struct sk_buff *skb, struct 
net_device *dev, unsigned short
        return -37;
 }
 
-static int nr_set_mac_address(struct net_device *dev, void *addr)
+static int __must_check nr_set_mac_address(struct net_device *dev, void *addr)
 {
        struct sockaddr *sa = addr;
+       int err;
+
+       if (!memcmp(dev->dev_addr, sa->sa_data, dev->addr_len))
+               return 0;
+
+       if (dev->flags & IFF_UP) {
+               err = ax25_listen_register((ax25_address *)sa->sa_data, NULL);
+               if (err)
+                       return err;
 
-       if (dev->flags & IFF_UP)
                ax25_listen_release((ax25_address *)dev->dev_addr, NULL);
+       }
 
        memcpy(dev->dev_addr, sa->sa_data, dev->addr_len);
 
-       if (dev->flags & IFF_UP)
-               ax25_listen_register((ax25_address *)dev->dev_addr, NULL);
-
        return 0;
 }
 
 static int nr_open(struct net_device *dev)
 {
+       int err;
+
+       err = ax25_listen_register((ax25_address *)dev->dev_addr, NULL);
+       if (err)
+               return err;
+
        netif_start_queue(dev);
-       ax25_listen_register((ax25_address *)dev->dev_addr, NULL);
+
        return 0;
 }
 
diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c
index 1605069..09f8a06 100644
--- a/net/rose/af_rose.c
+++ b/net/rose/af_rose.c
@@ -1314,7 +1314,8 @@ static int rose_ioctl(struct socket *sock, unsigned int 
cmd, unsigned long arg)
                if (copy_from_user(&rose_callsign, argp, sizeof(ax25_address)))
                        return -EFAULT;
                if (ax25cmp(&rose_callsign, &null_ax25_address) != 0)
-                       ax25_listen_register(&rose_callsign, NULL);
+                       return ax25_listen_register(&rose_callsign, NULL);
+
                return 0;
 
        case SIOCRSGL2CALL:
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to