diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-11 15:34:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-11 15:34:13 -0400 |
commit | 2b76db6a0f649f5a54805807d36d51b6e9e49089 (patch) | |
tree | 1155e363d3ea5e416ac5627402dd862028db6907 /net | |
parent | 53bf710832a7191e023e2bb1e333226e3115cfa0 (diff) | |
parent | 50192abe02929586111fb33f216060a9341875f1 (diff) |
Merge tag 'for-linus-3.12-merge' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs
Pull 9p updates from Eric Van Hensbergen:
"Minor 9p fixes and tweaks for 3.12 merge window
The first fixes namespace issues which causes a kernel NULL pointer
dereference, the second fixes uevent handling to work better with
udev, and the third switches some code to use srlcpy instead of
strncpy in order to be safer.
All changes have been baking in for-next for at least 2 weeks"
* tag 'for-linus-3.12-merge' of git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs:
fs/9p: avoid accessing utsname after namespace has been torn down
9p: send uevent after adding/removing mount_tag attribute
fs: 9p: use strlcpy instead of strncpy
Diffstat (limited to 'net')
-rw-r--r-- | net/9p/client.c | 5 | ||||
-rw-r--r-- | net/9p/trans_virtio.c | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/net/9p/client.c b/net/9p/client.c index ba93bdab2701..ee8fd6bd4035 100644 --- a/net/9p/client.c +++ b/net/9p/client.c | |||
@@ -987,6 +987,7 @@ struct p9_client *p9_client_create(const char *dev_name, char *options) | |||
987 | { | 987 | { |
988 | int err; | 988 | int err; |
989 | struct p9_client *clnt; | 989 | struct p9_client *clnt; |
990 | char *client_id; | ||
990 | 991 | ||
991 | err = 0; | 992 | err = 0; |
992 | clnt = kmalloc(sizeof(struct p9_client), GFP_KERNEL); | 993 | clnt = kmalloc(sizeof(struct p9_client), GFP_KERNEL); |
@@ -995,6 +996,10 @@ struct p9_client *p9_client_create(const char *dev_name, char *options) | |||
995 | 996 | ||
996 | clnt->trans_mod = NULL; | 997 | clnt->trans_mod = NULL; |
997 | clnt->trans = NULL; | 998 | clnt->trans = NULL; |
999 | |||
1000 | client_id = utsname()->nodename; | ||
1001 | memcpy(clnt->name, client_id, strlen(client_id) + 1); | ||
1002 | |||
998 | spin_lock_init(&clnt->lock); | 1003 | spin_lock_init(&clnt->lock); |
999 | INIT_LIST_HEAD(&clnt->fidlist); | 1004 | INIT_LIST_HEAD(&clnt->fidlist); |
1000 | 1005 | ||
diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c index e1c26b101830..990afab2be1b 100644 --- a/net/9p/trans_virtio.c +++ b/net/9p/trans_virtio.c | |||
@@ -577,6 +577,10 @@ static int p9_virtio_probe(struct virtio_device *vdev) | |||
577 | mutex_lock(&virtio_9p_lock); | 577 | mutex_lock(&virtio_9p_lock); |
578 | list_add_tail(&chan->chan_list, &virtio_chan_list); | 578 | list_add_tail(&chan->chan_list, &virtio_chan_list); |
579 | mutex_unlock(&virtio_9p_lock); | 579 | mutex_unlock(&virtio_9p_lock); |
580 | |||
581 | /* Let udev rules use the new mount_tag attribute. */ | ||
582 | kobject_uevent(&(vdev->dev.kobj), KOBJ_CHANGE); | ||
583 | |||
580 | return 0; | 584 | return 0; |
581 | 585 | ||
582 | out_free_tag: | 586 | out_free_tag: |
@@ -654,6 +658,7 @@ static void p9_virtio_remove(struct virtio_device *vdev) | |||
654 | list_del(&chan->chan_list); | 658 | list_del(&chan->chan_list); |
655 | mutex_unlock(&virtio_9p_lock); | 659 | mutex_unlock(&virtio_9p_lock); |
656 | sysfs_remove_file(&(vdev->dev.kobj), &dev_attr_mount_tag.attr); | 660 | sysfs_remove_file(&(vdev->dev.kobj), &dev_attr_mount_tag.attr); |
661 | kobject_uevent(&(vdev->dev.kobj), KOBJ_CHANGE); | ||
657 | kfree(chan->tag); | 662 | kfree(chan->tag); |
658 | kfree(chan->vc_wq); | 663 | kfree(chan->vc_wq); |
659 | kfree(chan); | 664 | kfree(chan); |