[Devel] [PATCH RH7] netlink: add an option to set sk->err from userspace
Pavel Tikhomirov
ptikhomirov at virtuozzo.com
Wed Oct 28 18:15:59 MSK 2020
Nice!
Do we need to protect it with some kind of capable? So that one can't
use it from container. (probably repair mode is already a valid
protection but please check to be sure)
On 10/28/20 5:59 PM, Andrey Zhadchenko wrote:
> Sometimes during dump criu can encounter netlink sockets with overflown kernel
> buffer, which results in ENOBUFS error during next read. We need an reliable
> way to restore sk->sk_err.
>
> https://jira.sw.ru/browse/PSBM-120976
> Signed-off-by: Andrey Zhadchenko <andrey.zhadchenko at virtuozzo.com>
> ---
> include/uapi/linux/netlink.h | 1 +
> net/netlink/af_netlink.c | 8 ++++++++
> 2 files changed, 9 insertions(+)
>
> diff --git a/include/uapi/linux/netlink.h b/include/uapi/linux/netlink.h
> index 3756be5..62f8b4b 100644
> --- a/include/uapi/linux/netlink.h
> +++ b/include/uapi/linux/netlink.h
> @@ -115,6 +115,7 @@ struct nlmsgerr {
> #define NETLINK_CAP_ACK 10
>
> #define NETLINK_REPAIR2 127
> +#define NETLINK_SETERR 128
>
> struct nl_pktinfo {
> __u32 group;
> diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
> index 7b3de33..104045e 100644
> --- a/net/netlink/af_netlink.c
> +++ b/net/netlink/af_netlink.c
> @@ -1535,6 +1535,14 @@ static int netlink_setsockopt(struct socket *sock, int level, int optname,
> nlk->flags &= ~NETLINK_F_REPAIR;
> err = 0;
> break;
> + case NETLINK_SETERR:
> + err = -ENOPROTOOPT;
> + if (nlk->flags & NETLINK_F_REPAIR && val < MAX_ERRNO) { > + sk->sk_err = val;
> + sk->sk_error_report(sk);
> + err = 0; > + }
> + break;
> case NETLINK_PKTINFO:
> if (val)
> nlk->flags |= NETLINK_F_RECV_PKTINFO;
>
--
Best regards, Tikhomirov Pavel
Software Developer, Virtuozzo.
More information about the Devel
mailing list