diff options
author | Erik Hugne <erik.hugne@ericsson.com> | 2014-08-15 10:44:35 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-08-16 23:17:34 -0400 |
commit | ac32c7f705692b92fe12dcbe88fe87136fdfff6f (patch) | |
tree | 9338c8e950a138f41d5bc1c2fa9f5a669e88050f | |
parent | 21009686662fd21412ca35def7cb3cc8346e1c3d (diff) |
tipc: fix message importance range check
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>
-rw-r--r-- | net/tipc/port.h | 4 | ||||
-rw-r--r-- | net/tipc/socket.c | 2 |
2 files changed, 4 insertions, 2 deletions
diff --git a/net/tipc/port.h b/net/tipc/port.h index 3f93454592b6..a69118ff018b 100644 --- a/net/tipc/port.h +++ b/net/tipc/port.h | |||
@@ -179,8 +179,10 @@ static inline int tipc_port_importance(struct tipc_port *port) | |||
179 | return msg_importance(&port->phdr); | 179 | return msg_importance(&port->phdr); |
180 | } | 180 | } |
181 | 181 | ||
182 | static inline void tipc_port_set_importance(struct tipc_port *port, int imp) | 182 | static inline int tipc_port_set_importance(struct tipc_port *port, int imp) |
183 | { | 183 | { |
184 | if (imp > TIPC_CRITICAL_IMPORTANCE) | ||
185 | return -EINVAL | ||
184 | msg_set_importance(&port->phdr, (u32)imp); | 186 | msg_set_importance(&port->phdr, (u32)imp); |
185 | } | 187 | } |
186 | 188 | ||
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 7d423ee10897..ff8c8118d56e 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -1973,7 +1973,7 @@ static int tipc_setsockopt(struct socket *sock, int lvl, int opt, | |||
1973 | 1973 | ||
1974 | switch (opt) { | 1974 | switch (opt) { |
1975 | case TIPC_IMPORTANCE: | 1975 | case TIPC_IMPORTANCE: |
1976 | tipc_port_set_importance(port, value); | 1976 | res = tipc_port_set_importance(port, value); |
1977 | break; | 1977 | break; |
1978 | case TIPC_SRC_DROPPABLE: | 1978 | case TIPC_SRC_DROPPABLE: |
1979 | if (sock->type != SOCK_STREAM) | 1979 | if (sock->type != SOCK_STREAM) |