Cyrill Gorcunov <gorcu...@gmail.com> writes:

> Currently unix_diag_vfs structure reports unix socket inode
> as u32 value which of course doesn't fit to ino_t type and
> the number may be trimmed. Lets rather deprecate old UDIAG_SHOW_VFS
> interface and provide UDIAG_SHOW_VFS2 (with one field "__zero" reserved
> which we could extend in future).
>

[...]

> -static int sk_diag_dump_vfs(struct sock *sk, struct sk_buff *nlskb)
> +static int sk_diag_dump_vfs(struct sock *sk, struct sk_buff *nlskb, unsigned 
> int flags)
>  {
>       struct dentry *dentry = unix_sk(sk)->path.dentry;
>  
>       if (dentry) {
> -             struct unix_diag_vfs uv = {
> -                     .udiag_vfs_ino = d_backing_inode(dentry)->i_ino,
> -                     .udiag_vfs_dev = dentry->d_sb->s_dev,
> -             };
> -
> -             return nla_put(nlskb, UNIX_DIAG_VFS, sizeof(uv), &uv);
> +             if (flags & UDIAG_SHOW_VFS2) {
> +                     struct unix_diag_vfs uv = {
> +                             .udiag_vfs_ino = d_backing_inode(dentry)->i_ino,
> +                             .udiag_vfs_dev = dentry->d_sb->s_dev,
> +                     };
> +                     return nla_put(nlskb, UNIX_DIAG_VFS, sizeof(uv), &uv);
> +             } else {
> +                     struct unix_diag_vfs2 uv = {
> +                             .udiag_vfs_ino = d_backing_inode(dentry)->i_ino,
> +                             .udiag_vfs_dev = dentry->d_sb->s_dev,
> +                     };

I think __zero should be explicitly set to 0.

[...]

Reply via email to