Commit ccd2a3ed authored by Jan Moskyto Matejka's avatar Jan Moskyto Matejka

Kernel socket missing err_hook fix

Thanks to Tim Weippert for bugreport.
parent 79e2293a
...@@ -911,6 +911,12 @@ krt_sock_hook(sock *sk, int size UNUSED) ...@@ -911,6 +911,12 @@ krt_sock_hook(sock *sk, int size UNUSED)
return 0; return 0;
} }
static void
krt_sock_err_hook(sock *sk, int e UNUSED)
{
krt_sock_hook(sk, 0);
}
static sock * static sock *
krt_sock_open(pool *pool, void *data, int table_id) krt_sock_open(pool *pool, void *data, int table_id)
{ {
...@@ -932,6 +938,7 @@ krt_sock_open(pool *pool, void *data, int table_id) ...@@ -932,6 +938,7 @@ krt_sock_open(pool *pool, void *data, int table_id)
sk = sk_new(pool); sk = sk_new(pool);
sk->type = SK_MAGIC; sk->type = SK_MAGIC;
sk->rx_hook = krt_sock_hook; sk->rx_hook = krt_sock_hook;
sk->err_hook = krt_sock_err_hook;
sk->fd = fd; sk->fd = fd;
sk->data = data; sk->data = data;
......
...@@ -1525,6 +1525,12 @@ nl_async_hook(sock *sk, int size UNUSED) ...@@ -1525,6 +1525,12 @@ nl_async_hook(sock *sk, int size UNUSED)
return 1; return 1;
} }
static void
nl_async_err_hook(sock *sk, int e UNUSED)
{
nl_async_hook(sk, 0);
}
static void static void
nl_open_async(void) nl_open_async(void)
{ {
...@@ -1563,6 +1569,7 @@ nl_open_async(void) ...@@ -1563,6 +1569,7 @@ nl_open_async(void)
sk = nl_async_sk = sk_new(krt_pool); sk = nl_async_sk = sk_new(krt_pool);
sk->type = SK_MAGIC; sk->type = SK_MAGIC;
sk->rx_hook = nl_async_hook; sk->rx_hook = nl_async_hook;
sk->err_hook = nl_async_err_hook;
sk->fd = fd; sk->fd = fd;
if (sk_open(sk) < 0) if (sk_open(sk) < 0)
bug("Netlink: sk_open failed"); bug("Netlink: sk_open failed");
......
...@@ -1857,7 +1857,7 @@ void ...@@ -1857,7 +1857,7 @@ void
sk_err(sock *s, int revents) sk_err(sock *s, int revents)
{ {
int se = 0, sse = sizeof(se); int se = 0, sse = sizeof(se);
if (revents & POLLERR) if ((s->type != SK_MAGIC) && (revents & POLLERR))
if (getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &se, &sse) < 0) if (getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &se, &sse) < 0)
{ {
log(L_ERR "IO: Socket error: SO_ERROR: %m"); log(L_ERR "IO: Socket error: SO_ERROR: %m");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment