lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20210203143103.292ea9e0@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com>
Date:   Wed, 3 Feb 2021 14:31:03 -0800
From:   Jakub Kicinski <kuba@...nel.org>
To:     Marcelo Ricardo Leitner <marcelo.leitner@...il.com>
Cc:     netdev@...r.kernel.org
Subject: Re: [PATCH RESEND net-next] netlink: add tracepoint at
 NL_SET_ERR_MSG

On Mon,  1 Feb 2021 15:12:19 -0300 Marcelo Ricardo Leitner wrote:
> Often userspace won't request the extack information, or they don't log it
> because of log level or so, and even when they do, sometimes it's not
> enough to know exactly what caused the error.
> 
> Netlink extack is the standard way of reporting erros with descriptive
> error messages. With a trace point on it, we then can know exactly where
> the error happened, regardless of userspace app. Also, we can even see if
> the err msg was overwritten.
> 
> The wrapper do_trace_netlink_extack() is because trace points shouldn't be
> called from .h files, as trace points are not that small, and the function
> call to do_trace_netlink_extack() on the macros is not protected by
> tracepoint_enabled() because the macros are called from modules, and this
> would require exporting some trace structs. As this is error path, it's
> better to export just the wrapper instead.
> 
> Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@...il.com>

> --- a/include/linux/netlink.h
> +++ b/include/linux/netlink.h
> @@ -6,11 +6,15 @@
>  #include <linux/capability.h>
>  #include <linux/skbuff.h>
>  #include <linux/export.h>
> +#include <linux/tracepoint.h>

Do we need the include...

>  #include <net/scm.h>
>  #include <uapi/linux/netlink.h>
>  
>  struct net;
>  
> +DECLARE_TRACEPOINT(netlink_extack);

... and the declaration? Seems to be a leftover.

> +void do_trace_netlink_extack(const char *msg);
> +
>  static inline struct nlmsghdr *nlmsg_hdr(const struct sk_buff *skb)
>  {
>  	return (struct nlmsghdr *)skb->data;
> @@ -90,6 +94,8 @@ struct netlink_ext_ack {
>  	static const char __msg[] = msg;		\
>  	struct netlink_ext_ack *__extack = (extack);	\
>  							\
> +	do_trace_netlink_extack(__msg);			\
> +							\
>  	if (__extack)					\
>  		__extack->_msg = __msg;			\
>  } while (0)
> @@ -110,6 +116,8 @@ struct netlink_ext_ack {
>  	static const char __msg[] = msg;			\
>  	struct netlink_ext_ack *__extack = (extack);		\
>  								\
> +	do_trace_netlink_extack(__msg);				\
> +								\
>  	if (__extack) {						\
>  		__extack->_msg = __msg;				\
>  		__extack->bad_attr = (attr);			\

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ