Commit d13fda85 authored by Eric W. Biederman's avatar Eric W. Biederman

userns: Convert net/ax25 to use kuid_t where appropriate

Cc: Ralf Baechle <ralf@linux-mips.org>
Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
Acked-by: default avatarSerge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
parent 523a6a94
...@@ -157,7 +157,7 @@ enum { ...@@ -157,7 +157,7 @@ enum {
typedef struct ax25_uid_assoc { typedef struct ax25_uid_assoc {
struct hlist_node uid_node; struct hlist_node uid_node;
atomic_t refcount; atomic_t refcount;
uid_t uid; kuid_t uid;
ax25_address call; ax25_address call;
} ax25_uid_assoc; } ax25_uid_assoc;
...@@ -434,7 +434,7 @@ extern unsigned long ax25_display_timer(struct timer_list *); ...@@ -434,7 +434,7 @@ extern unsigned long ax25_display_timer(struct timer_list *);
/* ax25_uid.c */ /* ax25_uid.c */
extern int ax25_uid_policy; extern int ax25_uid_policy;
extern ax25_uid_assoc *ax25_findbyuid(uid_t); extern ax25_uid_assoc *ax25_findbyuid(kuid_t);
extern int __must_check ax25_uid_ioctl(int, struct sockaddr_ax25 *); extern int __must_check ax25_uid_ioctl(int, struct sockaddr_ax25 *);
extern const struct file_operations ax25_uid_fops; extern const struct file_operations ax25_uid_fops;
extern void ax25_uid_free(void); extern void ax25_uid_free(void);
......
...@@ -952,7 +952,6 @@ config UIDGID_CONVERTED ...@@ -952,7 +952,6 @@ config UIDGID_CONVERTED
depends on NET_KEY = n depends on NET_KEY = n
depends on INET_DIAG = n depends on INET_DIAG = n
depends on DNS_RESOLVER = n depends on DNS_RESOLVER = n
depends on AX25 = n
# Filesystems # Filesystems
depends on USB_GADGETFS = n depends on USB_GADGETFS = n
......
...@@ -51,14 +51,14 @@ int ax25_uid_policy; ...@@ -51,14 +51,14 @@ int ax25_uid_policy;
EXPORT_SYMBOL(ax25_uid_policy); EXPORT_SYMBOL(ax25_uid_policy);
ax25_uid_assoc *ax25_findbyuid(uid_t uid) ax25_uid_assoc *ax25_findbyuid(kuid_t uid)
{ {
ax25_uid_assoc *ax25_uid, *res = NULL; ax25_uid_assoc *ax25_uid, *res = NULL;
struct hlist_node *node; struct hlist_node *node;
read_lock(&ax25_uid_lock); read_lock(&ax25_uid_lock);
ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) { ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) {
if (ax25_uid->uid == uid) { if (uid_eq(ax25_uid->uid, uid)) {
ax25_uid_hold(ax25_uid); ax25_uid_hold(ax25_uid);
res = ax25_uid; res = ax25_uid;
break; break;
...@@ -84,7 +84,7 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax) ...@@ -84,7 +84,7 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
read_lock(&ax25_uid_lock); read_lock(&ax25_uid_lock);
ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) { ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) {
if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0) { if (ax25cmp(&sax->sax25_call, &ax25_uid->call) == 0) {
res = ax25_uid->uid; res = from_kuid_munged(current_user_ns(), ax25_uid->uid);
break; break;
} }
} }
...@@ -93,9 +93,14 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax) ...@@ -93,9 +93,14 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
return res; return res;
case SIOCAX25ADDUID: case SIOCAX25ADDUID:
{
kuid_t sax25_kuid;
if (!capable(CAP_NET_ADMIN)) if (!capable(CAP_NET_ADMIN))
return -EPERM; return -EPERM;
user = ax25_findbyuid(sax->sax25_uid); sax25_kuid = make_kuid(current_user_ns(), sax->sax25_uid);
if (!uid_valid(sax25_kuid))
return -EINVAL;
user = ax25_findbyuid(sax25_kuid);
if (user) { if (user) {
ax25_uid_put(user); ax25_uid_put(user);
return -EEXIST; return -EEXIST;
...@@ -106,7 +111,7 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax) ...@@ -106,7 +111,7 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
return -ENOMEM; return -ENOMEM;
atomic_set(&ax25_uid->refcount, 1); atomic_set(&ax25_uid->refcount, 1);
ax25_uid->uid = sax->sax25_uid; ax25_uid->uid = sax25_kuid;
ax25_uid->call = sax->sax25_call; ax25_uid->call = sax->sax25_call;
write_lock(&ax25_uid_lock); write_lock(&ax25_uid_lock);
...@@ -114,7 +119,7 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax) ...@@ -114,7 +119,7 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
write_unlock(&ax25_uid_lock); write_unlock(&ax25_uid_lock);
return 0; return 0;
}
case SIOCAX25DELUID: case SIOCAX25DELUID:
if (!capable(CAP_NET_ADMIN)) if (!capable(CAP_NET_ADMIN))
return -EPERM; return -EPERM;
...@@ -172,7 +177,9 @@ static int ax25_uid_seq_show(struct seq_file *seq, void *v) ...@@ -172,7 +177,9 @@ static int ax25_uid_seq_show(struct seq_file *seq, void *v)
struct ax25_uid_assoc *pt; struct ax25_uid_assoc *pt;
pt = hlist_entry(v, struct ax25_uid_assoc, uid_node); pt = hlist_entry(v, struct ax25_uid_assoc, uid_node);
seq_printf(seq, "%6d %s\n", pt->uid, ax2asc(buf, &pt->call)); seq_printf(seq, "%6d %s\n",
from_kuid_munged(seq_user_ns(seq), pt->uid),
ax2asc(buf, &pt->call));
} }
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment