mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2025-02-18 08:50:54 +01:00
monitor: Use socket filter also for netlink monitor interface
This commit is contained in:
parent
40160a7fd4
commit
0d81689e08
@ -1859,6 +1859,16 @@ static bool nlmon_receive(struct l_io *io, void *user_data)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct sock_filter mon_filter[] = {
|
||||||
|
/* skb->dev->type == 824 (ARPHRD_NETLINK) */
|
||||||
|
{ 0x28, 0, 0, 0xfffff01c }, /* (000) ldh #hatype */
|
||||||
|
{ 0x15, 0, 1, 0x00000338 }, /* (001) jeq #824 jt 2 jf 3 */
|
||||||
|
{ 0x06, 0, 0, 0xffffffff }, /* (002) ret #-1 */
|
||||||
|
{ 0x06, 0, 0, 0x00000000 }, /* (003) ret #0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct sock_fprog mon_fprog = { .len = 4, .filter = mon_filter };
|
||||||
|
|
||||||
static struct l_io *open_packet(const char *name)
|
static struct l_io *open_packet(const char *name)
|
||||||
{
|
{
|
||||||
struct l_io *io;
|
struct l_io *io;
|
||||||
@ -1903,8 +1913,15 @@ static struct l_io *open_packet(const char *name)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER,
|
||||||
|
&mon_fprog, sizeof(mon_fprog)) < 0) {
|
||||||
|
perror("Failed to enable monitor filter");
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, &opt, sizeof(opt)) < 0) {
|
if (setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, &opt, sizeof(opt)) < 0) {
|
||||||
perror("Failed to enable timestamps");
|
perror("Failed to enable monitor timestamps");
|
||||||
close(fd);
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -2045,7 +2062,7 @@ static bool pae_receive(struct l_io *io, void *user_data)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct sock_filter filter[] = {
|
static struct sock_filter pae_filter[] = {
|
||||||
/* skb->protocol == 0x888e (PAE) */
|
/* skb->protocol == 0x888e (PAE) */
|
||||||
{ 0x28, 0, 0, 0xfffff000 }, /* (000) ldh #proto */
|
{ 0x28, 0, 0, 0xfffff000 }, /* (000) ldh #proto */
|
||||||
{ 0x15, 0, 1, 0x0000888e }, /* (001) jeq #0x888e jt 2 jf 3 */
|
{ 0x15, 0, 1, 0x0000888e }, /* (001) jeq #0x888e jt 2 jf 3 */
|
||||||
@ -2053,7 +2070,7 @@ static struct sock_filter filter[] = {
|
|||||||
{ 0x06, 0, 0, 0x00000000 }, /* (003) ret #0 */
|
{ 0x06, 0, 0, 0x00000000 }, /* (003) ret #0 */
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct sock_fprog fprog = { .len = 4, .filter = filter };
|
static const struct sock_fprog pae_fprog = { .len = 4, .filter = pae_filter };
|
||||||
|
|
||||||
static struct l_io *open_pae(void)
|
static struct l_io *open_pae(void)
|
||||||
{
|
{
|
||||||
@ -2068,7 +2085,7 @@ static struct l_io *open_pae(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER,
|
if (setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER,
|
||||||
&fprog, sizeof(fprog)) < 0) {
|
&pae_fprog, sizeof(pae_fprog)) < 0) {
|
||||||
perror("Failed to enable authentication filter");
|
perror("Failed to enable authentication filter");
|
||||||
close(fd);
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user