Re: [linux-next:master 4018/13846] drivers/net/tun.c:2375:24: sparse: sparse: cast to non-scalar

Willem de Bruijn <[email protected]>
Newsgroups dev.linux.lists.oe-kbuild-all
Message-ID <CA+FuTSfy1bOw3QAB+5wXzdHaXAARNvUYS8nNqb_waz6UfYHOcQ@mail.gmail.com>
On Sun, Aug 9, 2026 at 11:33 PM kernel test robot <[email protected]> wrote:
>
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> head:   6b8c8af514d739d0335f5579b585e02babe8a727
> commit: 23dad2d088dfc82cae1f5a936f8ff7ffebb38dd9 [4018/13846] tun: no longer rely on RTNL in tun_fill_info()
> config: alpha-randconfig-r134-20260810 (https://download.01.org/0day-ci/archive/20260810/[email protected]/config)
> compiler: alpha-linux-gcc (GCC) 14.3.0
> sparse: v0.6.5-rc1
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260810/[email protected]/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <[email protected]>
> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
>
> sparse warnings: (new ones prefixed by >>)
> >> drivers/net/tun.c:2375:24: sparse: sparse: cast to non-scalar
> >> drivers/net/tun.c:2375:24: sparse: sparse: cast from non-scalar
>    drivers/net/tun.c:2376:24: sparse: sparse: cast to non-scalar
>    drivers/net/tun.c:2376:24: sparse: sparse: cast from non-scalar
>
> vim +2375 drivers/net/tun.c
>
>   2370
>   2371  static int tun_fill_info(struct sk_buff *skb, const struct net_device *dev)
>   2372  {
>   2373          const struct tun_struct *tun = netdev_priv(dev);
>   2374          unsigned int flags = READ_ONCE(tun->flags);
> > 2375          kuid_t owner = READ_ONCE(tun->owner);

I guess this would need to be owner.val and group.val to silence this
warning. Both from and to arguments.

That approach would not improve readability.

Types:

typedef struct {
        uid_t val;
} kuid_t;

typedef struct {
        gid_t val;
} kgid_t;

Whatever we choose to do (if anything), probably also applies to sk_uid:

static inline kuid_t sk_uid(const struct sock *sk)
{
        /* Paired with WRITE_ONCE() in sockfs_setattr() */
        return READ_ONCE(sk->sk_uid);
}

Another helper, make_kuid, uses a KUIDT_INIT wrapper to cast to the struct type.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.