diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2014-02-19 14:17:11 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2014-02-19 14:17:11 +0100 |
commit | ffc3a93d0dbf4ac887f528c0495cd586a092d88f (patch) | |
tree | 6d8d51a7cbd435d3e2a22a34f620770968c6c2b6 | |
parent | 50e4cc29f56b5401579cddaf42d0404320b9efa7 (diff) | |
download | busybox-w32-ffc3a93d0dbf4ac887f528c0495cd586a092d88f.tar.gz busybox-w32-ffc3a93d0dbf4ac887f528c0495cd586a092d88f.tar.bz2 busybox-w32-ffc3a93d0dbf4ac887f528c0495cd586a092d88f.zip |
udhcpc: fix BPF filter. Hopefully fixes the root cause of 4598 and 6746
Use a *signed* large positive value in BPF filter to indicate success.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/udhcp/d6_dhcpc.c | 2 | ||||
-rw-r--r-- | networking/udhcp/dhcpc.c | 7 |
2 files changed, 5 insertions, 4 deletions
diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c index b0f0798e5..044f04673 100644 --- a/networking/udhcp/d6_dhcpc.c +++ b/networking/udhcp/d6_dhcpc.c | |||
@@ -711,7 +711,7 @@ static int d6_raw_socket(int ifindex) | |||
711 | /* jump to L3 if udp dport is CLIENT_PORT6, else to L4 */ | 711 | /* jump to L3 if udp dport is CLIENT_PORT6, else to L4 */ |
712 | BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 68, 0, 1), | 712 | BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 68, 0, 1), |
713 | /* L3: accept packet */ | 713 | /* L3: accept packet */ |
714 | BPF_STMT(BPF_RET|BPF_K, 0xffffffff), | 714 | BPF_STMT(BPF_RET|BPF_K, 0x7fffffff), |
715 | /* L4: discard packet */ | 715 | /* L4: discard packet */ |
716 | BPF_STMT(BPF_RET|BPF_K, 0), | 716 | BPF_STMT(BPF_RET|BPF_K, 0), |
717 | }; | 717 | }; |
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c index bdb1e2b9b..25f18b35d 100644 --- a/networking/udhcp/dhcpc.c +++ b/networking/udhcp/dhcpc.c | |||
@@ -1025,9 +1025,10 @@ static int udhcp_raw_socket(int ifindex) | |||
1025 | BPF_STMT(BPF_LD|BPF_H|BPF_IND, 2), | 1025 | BPF_STMT(BPF_LD|BPF_H|BPF_IND, 2), |
1026 | /* jump to L3 if udp dport is CLIENT_PORT, else to L4 */ | 1026 | /* jump to L3 if udp dport is CLIENT_PORT, else to L4 */ |
1027 | BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 68, 0, 1), | 1027 | BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 68, 0, 1), |
1028 | /* L3: accept packet */ | 1028 | /* L3: accept packet ("accept 0x7fffffff bytes") */ |
1029 | BPF_STMT(BPF_RET|BPF_K, 0xffffffff), | 1029 | /* Accepting 0xffffffff works too but kernel 2.6.19 is buggy */ |
1030 | /* L4: discard packet */ | 1030 | BPF_STMT(BPF_RET|BPF_K, 0x7fffffff), |
1031 | /* L4: discard packet ("accept zero bytes") */ | ||
1031 | BPF_STMT(BPF_RET|BPF_K, 0), | 1032 | BPF_STMT(BPF_RET|BPF_K, 0), |
1032 | }; | 1033 | }; |
1033 | static const struct sock_fprog filter_prog = { | 1034 | static const struct sock_fprog filter_prog = { |