aboutsummaryrefslogtreecommitdiff
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
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
-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);