diff options
| -rw-r--r-- | drivers/net/xen-netback/xenbus.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c index 580517d857bf..4c9041e60e7d 100644 --- a/drivers/net/xen-netback/xenbus.c +++ b/drivers/net/xen-netback/xenbus.c | |||
| @@ -116,6 +116,7 @@ static int xenvif_read_io_ring(struct seq_file *m, void *v) | |||
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | #define XENVIF_KICK_STR "kick" | 118 | #define XENVIF_KICK_STR "kick" |
| 119 | #define BUFFER_SIZE 32 | ||
| 119 | 120 | ||
| 120 | static ssize_t | 121 | static ssize_t |
| 121 | xenvif_write_io_ring(struct file *filp, const char __user *buf, size_t count, | 122 | xenvif_write_io_ring(struct file *filp, const char __user *buf, size_t count, |
| @@ -124,22 +125,24 @@ xenvif_write_io_ring(struct file *filp, const char __user *buf, size_t count, | |||
| 124 | struct xenvif_queue *queue = | 125 | struct xenvif_queue *queue = |
| 125 | ((struct seq_file *)filp->private_data)->private; | 126 | ((struct seq_file *)filp->private_data)->private; |
| 126 | int len; | 127 | int len; |
| 127 | char write[sizeof(XENVIF_KICK_STR)]; | 128 | char write[BUFFER_SIZE]; |
| 128 | 129 | ||
| 129 | /* don't allow partial writes and check the length */ | 130 | /* don't allow partial writes and check the length */ |
| 130 | if (*ppos != 0) | 131 | if (*ppos != 0) |
| 131 | return 0; | 132 | return 0; |
| 132 | if (count < sizeof(XENVIF_KICK_STR) - 1) | 133 | if (count >= sizeof(write)) |
| 133 | return -ENOSPC; | 134 | return -ENOSPC; |
| 134 | 135 | ||
| 135 | len = simple_write_to_buffer(write, | 136 | len = simple_write_to_buffer(write, |
| 136 | sizeof(write), | 137 | sizeof(write) - 1, |
| 137 | ppos, | 138 | ppos, |
| 138 | buf, | 139 | buf, |
| 139 | count); | 140 | count); |
| 140 | if (len < 0) | 141 | if (len < 0) |
| 141 | return len; | 142 | return len; |
| 142 | 143 | ||
| 144 | write[len] = '\0'; | ||
| 145 | |||
| 143 | if (!strncmp(write, XENVIF_KICK_STR, sizeof(XENVIF_KICK_STR) - 1)) | 146 | if (!strncmp(write, XENVIF_KICK_STR, sizeof(XENVIF_KICK_STR) - 1)) |
| 144 | xenvif_interrupt(0, (void *)queue); | 147 | xenvif_interrupt(0, (void *)queue); |
| 145 | else { | 148 | else { |
