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 = { |
