@@ -104,7 +104,7 @@ void nft_meta_get_eval(const struct nft_expr *expr,
goto err;
}
- *dest = from_kuid_munged(&init_user_ns,
+ *dest = from_kuid_munged(pkt->net->user_ns,
sk->sk_socket->file->f_cred->fsuid);
read_unlock_bh(&sk->sk_callback_lock);
break;
@@ -119,7 +119,7 @@ void nft_meta_get_eval(const struct nft_expr *expr,
read_unlock_bh(&sk->sk_callback_lock);
goto err;
}
- *dest = from_kgid_munged(&init_user_ns,
+ *dest = from_kgid_munged(pkt->net->user_ns,
sk->sk_socket->file->f_cred->fsgid);
read_unlock_bh(&sk->sk_callback_lock);
break;
@@ -263,8 +263,6 @@ int nft_meta_get_init(const struct nft_ctx *ctx,
case NFT_META_MARK:
case NFT_META_IIF:
case NFT_META_OIF:
- case NFT_META_SKUID:
- case NFT_META_SKGID:
#ifdef CONFIG_IP_ROUTE_CLASSID
case NFT_META_RTCLASSID:
#endif
@@ -288,6 +286,12 @@ int nft_meta_get_init(const struct nft_ctx *ctx,
prandom_init_once(&nft_prandom_state);
len = sizeof(u32);
break;
+ case NFT_META_SKUID:
+ case NFT_META_SKGID:
+ if (current_user_ns() != net->user_ns)
+ return -EINVAL;
+ len = sizeof(u32);
+ break;
default:
return -EOPNOTSUPP;
}