X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/bcbafeb95a52849329d021ad1d375a2b40dd0d6d..02350b717e4fb9e55e333d24708ac432837fa875:/target/linux/generic-2.6/patches-2.6.29/240-packet_socket_type.patch diff --git a/target/linux/generic-2.6/patches-2.6.29/240-packet_socket_type.patch b/target/linux/generic-2.6/patches-2.6.29/240-packet_socket_type.patch index 741966bc6..e2840ea6b 100644 --- a/target/linux/generic-2.6/patches-2.6.29/240-packet_socket_type.patch +++ b/target/linux/generic-2.6/patches-2.6.29/240-packet_socket_type.patch @@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau /* These ones are invisible by user level */ #define PACKET_LOOPBACK 5 /* MC/BRD frame looped back */ #define PACKET_FASTROUTE 6 /* Fastrouted frame */ -+#define PACKET_ANY 0xffffffff ++#define PACKET_MASK_ANY 0xffffffff /* mask for packet type bits */ + /* Packet socket options */ @@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau unsigned int tp_hdrlen; unsigned int tp_reserve; #endif -+ int pkt_type; ++ unsigned int pkt_type; }; struct packet_skb_cb { @@ -91,21 +91,21 @@ Signed-off-by: Felix Fietkau if (dev_net(dev) != sock_net(sk)) goto drop; -@@ -1072,6 +1075,7 @@ static int packet_create(struct net *net +@@ -1073,6 +1076,7 @@ static int packet_create(struct net *net spin_lock_init(&po->bind_lock); mutex_init(&po->pg_vec_lock); po->prot_hook.func = packet_rcv; -+ po->pkt_type = PACKET_ANY & ~PACKET_LOOPBACK; ++ po->pkt_type = PACKET_MASK_ANY & ~(1 << PACKET_LOOPBACK); if (sock->type == SOCK_PACKET) po->prot_hook.func = packet_rcv_spkt; -@@ -1411,6 +1415,16 @@ packet_setsockopt(struct socket *sock, i +@@ -1413,6 +1417,16 @@ packet_setsockopt(struct socket *sock, i ret = packet_mc_drop(sk, &mreq); return ret; } + case PACKET_RECV_TYPE: + { -+ int val; ++ unsigned int val; + if (optlen != sizeof(val)) + return -EINVAL; + if (copy_from_user(&val, optval, sizeof(val))) @@ -116,13 +116,13 @@ Signed-off-by: Felix Fietkau #ifdef CONFIG_PACKET_MMAP case PACKET_RX_RING: -@@ -1542,6 +1556,13 @@ static int packet_getsockopt(struct sock +@@ -1544,6 +1558,13 @@ static int packet_getsockopt(struct sock data = &val; break; + case PACKET_RECV_TYPE: -+ if (len > sizeof(int)) -+ len = sizeof(int); ++ if (len > sizeof(unsigned int)) ++ len = sizeof(unsigned int); + val = po->pkt_type; + + data = &val;