}
  
        /* UID */
 -      if (skb->sk) {
 -              read_lock_bh(&skb->sk->sk_callback_lock);
 -              if (skb->sk->sk_socket && skb->sk->sk_socket->file) {
 -                      struct file *file = skb->sk->sk_socket->file;
 -                      __be32 uid = htonl(from_kuid_munged(inst->peer_user_ns,
 -                                                          file->f_cred->fsuid));
 -                      __be32 gid = htonl(from_kgid_munged(inst->peer_user_ns,
 -                                                          file->f_cred->fsgid));
 -                      /* need to unlock here since NLA_PUT may goto */
 -                      read_unlock_bh(&skb->sk->sk_callback_lock);
 +      sk = skb->sk;
 +      if (sk && sk->sk_state != TCP_TIME_WAIT) {
 +              read_lock_bh(&sk->sk_callback_lock);
 +              if (sk->sk_socket && sk->sk_socket->file) {
 +                      struct file *file = sk->sk_socket->file;
-                       __be32 uid = htonl(file->f_cred->fsuid);
-                       __be32 gid = htonl(file->f_cred->fsgid);
++                      const struct cred *cred = file->f_cred;
++                      struct user_namespace *user_ns = inst->peer_user_ns;
++                      __be32 uid = htonl(from_kuid_munged(user_ns, cred->fsuid));
++                      __be32 gid = htonl(from_kgid_munged(user_ns, cred->fsgid));
 +                      read_unlock_bh(&sk->sk_callback_lock);
                        if (nla_put_be32(inst->skb, NFULA_UID, uid) ||
                            nla_put_be32(inst->skb, NFULA_GID, gid))
                                goto nla_put_failure;
 
        return 0;
  }
  
-       if (sk->sk_socket && sk->sk_socket->file)
 +static void dump_sk_uid_gid(struct sbuff *m, struct sock *sk)
 +{
 +      if (!sk || sk->sk_state == TCP_TIME_WAIT)
 +              return;
 +
 +      read_lock_bh(&sk->sk_callback_lock);
-                       sk->sk_socket->file->f_cred->fsuid,
-                       sk->sk_socket->file->f_cred->fsgid);
++      if (sk->sk_socket && sk->sk_socket->file) {
++              const struct cred *cred = sk->sk_socket->file->f_cred;
 +              sb_add(m, "UID=%u GID=%u ",
++                      from_kuid_munged(&init_user_ns, cred->fsuid),
++                      from_kgid_munged(&init_user_ns, cred->fsgid));
++      }
 +      read_unlock_bh(&sk->sk_callback_lock);
 +}
 +
  /* One level of recursion won't kill us */
  static void dump_ipv4_packet(struct sbuff *m,
                        const struct nf_loginfo *info,