aboutsummaryrefslogtreecommitdiff
path: root/networking
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2004-05-05 07:05:32 +0000
committerEric Andersen <andersen@codepoet.org>2004-05-05 07:05:32 +0000
commit6c8161d69fe9fce0f862b678aaa84866aaaeff8f (patch)
tree28ca3d47c5325c070ffc3e84b136d8bed02a328f /networking
parent5ec58285c3990ebab9900295f1a1d32824338719 (diff)
downloadbusybox-w32-6c8161d69fe9fce0f862b678aaa84866aaaeff8f.tar.gz
busybox-w32-6c8161d69fe9fce0f862b678aaa84866aaaeff8f.tar.bz2
busybox-w32-6c8161d69fe9fce0f862b678aaa84866aaaeff8f.zip
Steve Grubb writes:
Hello, Last November a bug was found in iproute. CAN-2003-0856 has more information. Basically, netlink packets can come from any user. If a program performs action based on netlink packets, they must be examined to make sure they came from the place they are expected (the kernel). Attached is a patch against pre8. Please apply this before releasing 1.00 final. All users of busy box may be vulnerable to local attacks without it. Best Regards, Steve Grubb
Diffstat (limited to 'networking')
-rw-r--r--networking/libiproute/libnetlink.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/networking/libiproute/libnetlink.c b/networking/libiproute/libnetlink.c
index 861daef86..5545be8fe 100644
--- a/networking/libiproute/libnetlink.c
+++ b/networking/libiproute/libnetlink.c
@@ -161,7 +161,8 @@ int rtnl_dump_filter(struct rtnl_handle *rth,
161 while (NLMSG_OK(h, status)) { 161 while (NLMSG_OK(h, status)) {
162 int err; 162 int err;
163 163
164 if (h->nlmsg_pid != rth->local.nl_pid || 164 if (nladdr.nl_pid != 0 ||
165 h->nlmsg_pid != rth->local.nl_pid ||
165 h->nlmsg_seq != rth->dump) { 166 h->nlmsg_seq != rth->dump) {
166 if (junk) { 167 if (junk) {
167 err = junk(&nladdr, h, arg2); 168 err = junk(&nladdr, h, arg2);
@@ -270,7 +271,8 @@ int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
270 bb_error_msg_and_die("!!!malformed message: len=%d", len); 271 bb_error_msg_and_die("!!!malformed message: len=%d", len);
271 } 272 }
272 273
273 if (h->nlmsg_pid != rtnl->local.nl_pid || 274 if (nladdr.nl_pid != peer ||
275 h->nlmsg_pid != rtnl->local.nl_pid ||
274 h->nlmsg_seq != seq) { 276 h->nlmsg_seq != seq) {
275 if (junk) { 277 if (junk) {
276 l_err = junk(&nladdr, h, jarg); 278 l_err = junk(&nladdr, h, jarg);