diff options
| -rw-r--r-- | drivers/staging/p9auth/p9auth.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/staging/p9auth/p9auth.c b/drivers/staging/p9auth/p9auth.c index 9111dcba37a1..8ccfff723eec 100644 --- a/drivers/staging/p9auth/p9auth.c +++ b/drivers/staging/p9auth/p9auth.c | |||
| @@ -183,7 +183,7 @@ static ssize_t cap_write(struct file *filp, const char __user *buf, | |||
| 183 | user_buf_running = NULL; | 183 | user_buf_running = NULL; |
| 184 | hash_str = NULL; | 184 | hash_str = NULL; |
| 185 | node_ptr = kmalloc(sizeof(struct cap_node), GFP_KERNEL); | 185 | node_ptr = kmalloc(sizeof(struct cap_node), GFP_KERNEL); |
| 186 | user_buf = kzalloc(count, GFP_KERNEL); | 186 | user_buf = kzalloc(count+1, GFP_KERNEL); |
| 187 | if (!node_ptr || !user_buf) | 187 | if (!node_ptr || !user_buf) |
| 188 | goto out; | 188 | goto out; |
| 189 | 189 | ||
| @@ -207,6 +207,7 @@ static ssize_t cap_write(struct file *filp, const char __user *buf, | |||
| 207 | list_add(&(node_ptr->list), &(dev->head->list)); | 207 | list_add(&(node_ptr->list), &(dev->head->list)); |
| 208 | node_ptr = NULL; | 208 | node_ptr = NULL; |
| 209 | } else { | 209 | } else { |
| 210 | char *tmpu; | ||
| 210 | if (!cap_devices[0].head || | 211 | if (!cap_devices[0].head || |
| 211 | list_empty(&(cap_devices[0].head->list))) { | 212 | list_empty(&(cap_devices[0].head->list))) { |
| 212 | retval = -EINVAL; | 213 | retval = -EINVAL; |
| @@ -218,10 +219,10 @@ static ssize_t cap_write(struct file *filp, const char __user *buf, | |||
| 218 | * need to split it and hash 'user1@user2' using 'randomstring' | 219 | * need to split it and hash 'user1@user2' using 'randomstring' |
| 219 | * as the key. | 220 | * as the key. |
| 220 | */ | 221 | */ |
| 221 | user_buf_running = kstrdup(user_buf, GFP_KERNEL); | 222 | tmpu = user_buf_running = kstrdup(user_buf, GFP_KERNEL); |
| 222 | source_user = strsep(&user_buf_running, "@"); | 223 | source_user = strsep(&tmpu, "@"); |
| 223 | target_user = strsep(&user_buf_running, "@"); | 224 | target_user = strsep(&tmpu, "@"); |
| 224 | rand_str = strsep(&user_buf_running, "@"); | 225 | rand_str = tmpu; |
| 225 | if (!source_user || !target_user || !rand_str) { | 226 | if (!source_user || !target_user || !rand_str) { |
| 226 | retval = -EINVAL; | 227 | retval = -EINVAL; |
| 227 | goto out; | 228 | goto out; |
| @@ -229,7 +230,8 @@ static ssize_t cap_write(struct file *filp, const char __user *buf, | |||
| 229 | 230 | ||
| 230 | /* hash the string user1@user2 with rand_str as the key */ | 231 | /* hash the string user1@user2 with rand_str as the key */ |
| 231 | len = strlen(source_user) + strlen(target_user) + 1; | 232 | len = strlen(source_user) + strlen(target_user) + 1; |
| 232 | hash_str = kzalloc(len, GFP_KERNEL); | 233 | /* src, @, len, \0 */ |
| 234 | hash_str = kzalloc(len+1, GFP_KERNEL); | ||
| 233 | strcat(hash_str, source_user); | 235 | strcat(hash_str, source_user); |
| 234 | strcat(hash_str, "@"); | 236 | strcat(hash_str, "@"); |
| 235 | strcat(hash_str, target_user); | 237 | strcat(hash_str, target_user); |
