aboutsummaryrefslogtreecommitdiffstats
path: root/fs/kernfs/dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/kernfs/dir.c')
-rw-r--r--fs/kernfs/dir.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
index 37989f02a226..6acc9648f986 100644
--- a/fs/kernfs/dir.c
+++ b/fs/kernfs/dir.c
@@ -201,10 +201,14 @@ static unsigned int kernfs_name_hash(const char *name, const void *ns)
201static int kernfs_name_compare(unsigned int hash, const char *name, 201static int kernfs_name_compare(unsigned int hash, const char *name,
202 const void *ns, const struct kernfs_node *kn) 202 const void *ns, const struct kernfs_node *kn)
203{ 203{
204 if (hash != kn->hash) 204 if (hash < kn->hash)
205 return hash - kn->hash; 205 return -1;
206 if (ns != kn->ns) 206 if (hash > kn->hash)
207 return ns - kn->ns; 207 return 1;
208 if (ns < kn->ns)
209 return -1;
210 if (ns > kn->ns)
211 return 1;
208 return strcmp(name, kn->name); 212 return strcmp(name, kn->name);
209} 213}
210 214
@@ -407,8 +411,9 @@ void kernfs_put(struct kernfs_node *kn)
407 411
408 if (kernfs_type(kn) == KERNFS_LINK) 412 if (kernfs_type(kn) == KERNFS_LINK)
409 kernfs_put(kn->symlink.target_kn); 413 kernfs_put(kn->symlink.target_kn);
410 if (!(kn->flags & KERNFS_STATIC_NAME)) 414
411 kfree(kn->name); 415 kfree_const(kn->name);
416
412 if (kn->iattr) { 417 if (kn->iattr) {
413 if (kn->iattr->ia_secdata) 418 if (kn->iattr->ia_secdata)
414 security_release_secctx(kn->iattr->ia_secdata, 419 security_release_secctx(kn->iattr->ia_secdata,
@@ -502,15 +507,12 @@ static struct kernfs_node *__kernfs_new_node(struct kernfs_root *root,
502 const char *name, umode_t mode, 507 const char *name, umode_t mode,
503 unsigned flags) 508 unsigned flags)
504{ 509{
505 char *dup_name = NULL;
506 struct kernfs_node *kn; 510 struct kernfs_node *kn;
507 int ret; 511 int ret;
508 512
509 if (!(flags & KERNFS_STATIC_NAME)) { 513 name = kstrdup_const(name, GFP_KERNEL);
510 name = dup_name = kstrdup(name, GFP_KERNEL); 514 if (!name)
511 if (!name) 515 return NULL;
512 return NULL;
513 }
514 516
515 kn = kmem_cache_zalloc(kernfs_node_cache, GFP_KERNEL); 517 kn = kmem_cache_zalloc(kernfs_node_cache, GFP_KERNEL);
516 if (!kn) 518 if (!kn)
@@ -534,7 +536,7 @@ static struct kernfs_node *__kernfs_new_node(struct kernfs_root *root,
534 err_out2: 536 err_out2:
535 kmem_cache_free(kernfs_node_cache, kn); 537 kmem_cache_free(kernfs_node_cache, kn);
536 err_out1: 538 err_out1:
537 kfree(dup_name); 539 kfree_const(name);
538 return NULL; 540 return NULL;
539} 541}
540 542
@@ -1260,7 +1262,7 @@ int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent,
1260 /* rename kernfs_node */ 1262 /* rename kernfs_node */
1261 if (strcmp(kn->name, new_name) != 0) { 1263 if (strcmp(kn->name, new_name) != 0) {
1262 error = -ENOMEM; 1264 error = -ENOMEM;
1263 new_name = kstrdup(new_name, GFP_KERNEL); 1265 new_name = kstrdup_const(new_name, GFP_KERNEL);
1264 if (!new_name) 1266 if (!new_name)
1265 goto out; 1267 goto out;
1266 } else { 1268 } else {
@@ -1281,9 +1283,7 @@ int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent,
1281 1283
1282 kn->ns = new_ns; 1284 kn->ns = new_ns;
1283 if (new_name) { 1285 if (new_name) {
1284 if (!(kn->flags & KERNFS_STATIC_NAME)) 1286 old_name = kn->name;
1285 old_name = kn->name;
1286 kn->flags &= ~KERNFS_STATIC_NAME;
1287 kn->name = new_name; 1287 kn->name = new_name;
1288 } 1288 }
1289 1289
@@ -1293,7 +1293,7 @@ int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent,
1293 kernfs_link_sibling(kn); 1293 kernfs_link_sibling(kn);
1294 1294
1295 kernfs_put(old_parent); 1295 kernfs_put(old_parent);
1296 kfree(old_name); 1296 kfree_const(old_name);
1297 1297
1298 error = 0; 1298 error = 0;
1299 out: 1299 out: