net/9p/trans_virtio.c: add null terminal for mount tag
PATCH v3 1/1 net/9p/trans_virtio.c: add null terminal for mount tag
chan->tag is Non-null terminated which will result in printing messy code when debugging code. So we should add '\0' for tag to make the code more convenient and robust. In addition, I drop char->tag_len to simplify the code.
Signed-off-by Jun Piao <[email protected]>
--- net/9p/trans_virtio.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-)
net/9p/trans_virtio.c +7 -10
@@ -89,10 +89,8 @@ struct virtio_chan {unsigned long p9_max_pages;/* Scatterlist: can be too big for stack. */ struct scatterlist sg[VIRTQUEUE_NUM ]; - -int tag_len;/* -* tag name to identify a mount Non-null terminated +* tag name to identify a mount null terminated */ char *tag;
@@ -525,14 +523,15 @@ static ssize_t p9_mount_tag_show(struct device *dev, {struct virtio_chan *chan;struct virtio_device *vdev; +int tag_len; vdev =dev_to_virtio (dev); chan = vdev->priv; + tag_len =strlen (chan->tag); -memcpy (buf, chan->tag, chan->tag_len); - buf[chan->tag_len] =0 ; +memcpy (buf, chan->tag, tag_len +1 ); -return chan->tag_len +1 ; +return tag_len +1 ; } static DEVICE_ATTR(mount_tag, 0444, p9_mount_tag_show, NULL);
@@ -585,7 +584,7 @@ static int p9_virtio_probe(struct virtio_device *vdev) err = -EINVAL ; goto out_free_vq; } - tag =kmalloc (tag_len,GFP_KERNEL ); + tag =kzalloc (tag_len +1 ,GFP_KERNEL );if (!tag) { err = -ENOMEM ; goto out_free_vq;
@@ -594,7 +593,6 @@ static int p9_virtio_probe(struct virtio_device *vdev)virtio_cread_bytes (vdev, offsetof(struct virtio_9p_config , tag), tag, tag_len); chan->tag = tag; - chan->tag_len = tag_len; err =sysfs_create_file (&(vdev->dev.kobj), &dev_attr_mount_tag.attr);if (err) { goto out_free_tag;
@@ -654,8 +652,7 @@ static int p9_virtio_probe(struct virtio_device *vdev)mutex_lock (&virtio_9p_lock);list_for_each_entry (chan, &virtio_chan_list, chan_list) { -if (!strncmp (devname, chan->tag, chan->tag_len) && -strlen (devname) == chan->tag_len) { +if (!strcmp (devname, chan->tag)) {if (!chan->inuse) { chan->inuse = true; found =1 ;
Dominique Martinet
maintainerpiaojun wrote on Fri, Aug 03, 2018:
Quoted 4 lines
chan->tagis Non-null terminated which will result in printing messy code when debugging code. So we should add '\0' for tag to make the code more convenient and robust. In addition, I dropchar->tag_lento simplify the code.
LGTM, I'll pick this up.
Thanks for the rework
Quoted 68 lines
Signed-off-by Jun Piao <[email protected]>--- net/9p/trans_virtio.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-)net/9p/trans_virtio.c +7
-10@@ -89,10 +89,8 @@ struct virtio_chan {unsigned long p9_max_pages;/* Scatterlist: can be too big for stack. */ struct scatterlist sg[VIRTQUEUE_NUM ]; - -int tag_len;/* -* tag name to identify a mount Non-null terminated +* tag name to identify a mount null terminated */ char *tag;@@ -525,14 +523,15 @@ static ssize_t p9_mount_tag_show(struct device *dev, {struct virtio_chan *chan;struct virtio_device *vdev; +int tag_len; vdev =dev_to_virtio (dev); chan = vdev->priv; + tag_len =strlen (chan->tag); -memcpy (buf, chan->tag, chan->tag_len); - buf[chan->tag_len] =0 ; +memcpy (buf, chan->tag, tag_len +1 ); -return chan->tag_len +1 ; +return tag_len +1 ; } static DEVICE_ATTR(mount_tag, 0444, p9_mount_tag_show, NULL);@@ -585,7 +584,7 @@ static int p9_virtio_probe(struct virtio_device *vdev) err = -EINVAL ; goto out_free_vq; } - tag =kmalloc (tag_len,GFP_KERNEL ); + tag =kzalloc (tag_len +1 ,GFP_KERNEL );if (!tag) { err = -ENOMEM ; goto out_free_vq;@@ -594,7 +593,6 @@ static int p9_virtio_probe(struct virtio_device *vdev)virtio_cread_bytes (vdev, offsetof(struct virtio_9p_config , tag), tag, tag_len); chan->tag = tag; - chan->tag_len = tag_len; err =sysfs_create_file (&(vdev->dev.kobj), &dev_attr_mount_tag.attr);if (err) { goto out_free_tag;@@ -654,8 +652,7 @@ static int p9_virtio_probe(struct virtio_device *vdev)mutex_lock (&virtio_9p_lock);list_for_each_entry (chan, &virtio_chan_list, chan_list) { -if (!strncmp (devname, chan->tag, chan->tag_len) && -strlen (devname) == chan->tag_len) { +if (!strcmp (devname, chan->tag)) {if (!chan->inuse) { chan->inuse = true; found =1 ;