namei.c (2e1a532883cf77f01031bef4b83d864a46c1bed0) namei.c (1eff1a1deec727bacead79ec64554c1df190f43c)
1/*
2 * Copyright (C) 2011 Novell Inc.
3 * Copyright (C) 2016 Red Hat, Inc.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 */

--- 277 unchanged lines hidden (view full) ---

286 if (WARN_ON(rem >= d->name.len))
287 return -EIO;
288 }
289 *ret = dentry;
290 return 0;
291}
292
293
1/*
2 * Copyright (C) 2011 Novell Inc.
3 * Copyright (C) 2016 Red Hat, Inc.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 */

--- 277 unchanged lines hidden (view full) ---

286 if (WARN_ON(rem >= d->name.len))
287 return -EIO;
288 }
289 *ret = dentry;
290 return 0;
291}
292
293
294static int ovl_check_origin_fh(struct ovl_fh *fh, struct dentry *upperdentry,
295 struct ovl_path *lower, unsigned int numlower,
294static int ovl_check_origin_fh(struct ovl_fs *ofs, struct ovl_fh *fh,
295 struct dentry *upperdentry,
296 struct ovl_path **stackp)
297{
296 struct ovl_path **stackp)
297{
298 struct vfsmount *mnt;
299 struct dentry *origin = NULL;
300 int i;
301
298 struct dentry *origin = NULL;
299 int i;
300
302 for (i = 0; i < numlower; i++) {
303 mnt = lower[i].layer->mnt;
304 origin = ovl_decode_fh(fh, mnt);
301 for (i = 0; i < ofs->numlower; i++) {
302 origin = ovl_decode_fh(fh, ofs->lower_layers[i].mnt);
305 if (origin)
306 break;
307 }
308
309 if (!origin)
310 return -ESTALE;
311 else if (IS_ERR(origin))
312 return PTR_ERR(origin);
313
314 if (!ovl_is_whiteout(upperdentry) &&
315 ((d_inode(origin)->i_mode ^ d_inode(upperdentry)->i_mode) & S_IFMT))
316 goto invalid;
317
318 if (!*stackp)
319 *stackp = kmalloc(sizeof(struct ovl_path), GFP_KERNEL);
320 if (!*stackp) {
321 dput(origin);
322 return -ENOMEM;
323 }
303 if (origin)
304 break;
305 }
306
307 if (!origin)
308 return -ESTALE;
309 else if (IS_ERR(origin))
310 return PTR_ERR(origin);
311
312 if (!ovl_is_whiteout(upperdentry) &&
313 ((d_inode(origin)->i_mode ^ d_inode(upperdentry)->i_mode) & S_IFMT))
314 goto invalid;
315
316 if (!*stackp)
317 *stackp = kmalloc(sizeof(struct ovl_path), GFP_KERNEL);
318 if (!*stackp) {
319 dput(origin);
320 return -ENOMEM;
321 }
324 **stackp = (struct ovl_path){.dentry = origin, .layer = lower[i].layer};
322 **stackp = (struct ovl_path){
323 .dentry = origin,
324 .layer = &ofs->lower_layers[i]
325 };
325
326 return 0;
327
328invalid:
329 pr_warn_ratelimited("overlayfs: invalid origin (%pd2, ftype=%x, origin ftype=%x).\n",
330 upperdentry, d_inode(upperdentry)->i_mode & S_IFMT,
331 d_inode(origin)->i_mode & S_IFMT);
332 dput(origin);
333 return -EIO;
334}
335
326
327 return 0;
328
329invalid:
330 pr_warn_ratelimited("overlayfs: invalid origin (%pd2, ftype=%x, origin ftype=%x).\n",
331 upperdentry, d_inode(upperdentry)->i_mode & S_IFMT,
332 d_inode(origin)->i_mode & S_IFMT);
333 dput(origin);
334 return -EIO;
335}
336
336static int ovl_check_origin(struct dentry *upperdentry,
337 struct ovl_path *lower, unsigned int numlower,
337static int ovl_check_origin(struct ovl_fs *ofs, struct dentry *upperdentry,
338 struct ovl_path **stackp, unsigned int *ctrp)
339{
340 struct ovl_fh *fh = ovl_get_origin_fh(upperdentry);
341 int err;
342
343 if (IS_ERR_OR_NULL(fh))
344 return PTR_ERR(fh);
345
338 struct ovl_path **stackp, unsigned int *ctrp)
339{
340 struct ovl_fh *fh = ovl_get_origin_fh(upperdentry);
341 int err;
342
343 if (IS_ERR_OR_NULL(fh))
344 return PTR_ERR(fh);
345
346 err = ovl_check_origin_fh(fh, upperdentry, lower, numlower, stackp);
346 err = ovl_check_origin_fh(ofs, fh, upperdentry, stackp);
347 kfree(fh);
348
349 if (err) {
350 if (err == -ESTALE)
351 return 0;
352 return err;
353 }
354

--- 63 unchanged lines hidden (view full) ---

418 goto out;
419}
420
421/*
422 * Verify that an index entry name matches the origin file handle stored in
423 * OVL_XATTR_ORIGIN and that origin file handle can be decoded to lower path.
424 * Return 0 on match, -ESTALE on mismatch or stale origin, < 0 on error.
425 */
347 kfree(fh);
348
349 if (err) {
350 if (err == -ESTALE)
351 return 0;
352 return err;
353 }
354

--- 63 unchanged lines hidden (view full) ---

418 goto out;
419}
420
421/*
422 * Verify that an index entry name matches the origin file handle stored in
423 * OVL_XATTR_ORIGIN and that origin file handle can be decoded to lower path.
424 * Return 0 on match, -ESTALE on mismatch or stale origin, < 0 on error.
425 */
426int ovl_verify_index(struct dentry *index, struct ovl_path *lower,
427 unsigned int numlower)
426int ovl_verify_index(struct ovl_fs *ofs, struct dentry *index)
428{
429 struct ovl_fh *fh = NULL;
430 size_t len;
431 struct ovl_path origin = { };
432 struct ovl_path *stack = &origin;
433 int err;
434
435 if (!d_inode(index))

--- 30 unchanged lines hidden (view full) ---

466 err = ovl_check_fh_len(fh, len);
467 if (err)
468 goto fail;
469
470 err = ovl_verify_origin_fh(index, fh);
471 if (err)
472 goto fail;
473
427{
428 struct ovl_fh *fh = NULL;
429 size_t len;
430 struct ovl_path origin = { };
431 struct ovl_path *stack = &origin;
432 int err;
433
434 if (!d_inode(index))

--- 30 unchanged lines hidden (view full) ---

465 err = ovl_check_fh_len(fh, len);
466 if (err)
467 goto fail;
468
469 err = ovl_verify_origin_fh(index, fh);
470 if (err)
471 goto fail;
472
474 err = ovl_check_origin_fh(fh, index, lower, numlower, &stack);
473 err = ovl_check_origin_fh(ofs, fh, index, &stack);
475 if (err)
476 goto fail;
477
478 /* Check if index is orphan and don't warn before cleaning it */
479 if (d_inode(index)->i_nlink == 1 &&
480 ovl_get_nlink(origin.dentry, index, 0) == 0)
481 err = -ENOENT;
482

--- 201 unchanged lines hidden (view full) ---

684 * We may get a disconnected dentry, which is fine,
685 * because we only need to hold the origin inode in
686 * cache and use its inode number. We may even get a
687 * connected dentry, that is not under any of the lower
688 * layers root. That is also fine for using it's inode
689 * number - it's the same as if we held a reference
690 * to a dentry in lower layer that was moved under us.
691 */
474 if (err)
475 goto fail;
476
477 /* Check if index is orphan and don't warn before cleaning it */
478 if (d_inode(index)->i_nlink == 1 &&
479 ovl_get_nlink(origin.dentry, index, 0) == 0)
480 err = -ENOENT;
481

--- 201 unchanged lines hidden (view full) ---

683 * We may get a disconnected dentry, which is fine,
684 * because we only need to hold the origin inode in
685 * cache and use its inode number. We may even get a
686 * connected dentry, that is not under any of the lower
687 * layers root. That is also fine for using it's inode
688 * number - it's the same as if we held a reference
689 * to a dentry in lower layer that was moved under us.
690 */
692 err = ovl_check_origin(upperdentry, roe->lowerstack,
693 roe->numlower, &stack, &ctr);
691 err = ovl_check_origin(ofs, upperdentry, &stack, &ctr);
694 if (err)
695 goto out_put_upper;
696 }
697
698 if (d.redirect) {
699 err = -ENOMEM;
700 upperredirect = kstrdup(d.redirect, GFP_KERNEL);
701 if (!upperredirect)

--- 186 unchanged lines hidden ---
692 if (err)
693 goto out_put_upper;
694 }
695
696 if (d.redirect) {
697 err = -ENOMEM;
698 upperredirect = kstrdup(d.redirect, GFP_KERNEL);
699 if (!upperredirect)

--- 186 unchanged lines hidden ---