Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -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 *);


/* 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);
+0 −1
Original line number Original line Diff line number Diff line
@@ -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
+14 −7
Original line number Original line Diff line number Diff line
@@ -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)
		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)
		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)
			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)
		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)
		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;
}
}