tipc: fix message importance range check
authorErik Hugne <erik.hugne@ericsson.com>
Fri, 15 Aug 2014 14:44:35 +0000 (16:44 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sun, 17 Aug 2014 03:17:34 +0000 (20:17 -0700)
Commit 3b4f302d8578 ("tipc: eliminate
redundant locking") introduced a bug by removing the sanity check
for message importance, allowing programs to assign any value to
the msg_user field. This will mess up the packet reception logic
and may cause random link resets.

Signed-off-by: Erik Hugne <erik.hugne@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/port.h
net/tipc/socket.c

index 3f93454..a69118f 100644 (file)
@@ -179,8 +179,10 @@ static inline int tipc_port_importance(struct tipc_port *port)
        return msg_importance(&port->phdr);
 }
 
-static inline void tipc_port_set_importance(struct tipc_port *port, int imp)
+static inline int tipc_port_set_importance(struct tipc_port *port, int imp)
 {
+       if (imp > TIPC_CRITICAL_IMPORTANCE)
+               return -EINVAL
        msg_set_importance(&port->phdr, (u32)imp);
 }
 
index 7d423ee..ff8c811 100644 (file)
@@ -1973,7 +1973,7 @@ static int tipc_setsockopt(struct socket *sock, int lvl, int opt,
 
        switch (opt) {
        case TIPC_IMPORTANCE:
-               tipc_port_set_importance(port, value);
+               res = tipc_port_set_importance(port, value);
                break;
        case TIPC_SRC_DROPPABLE:
                if (sock->type != SOCK_STREAM)