linux/fs/overlayfs/export.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Overlayfs NFS export support.
   4 *
   5 * Amir Goldstein <amir73il@gmail.com>
   6 *
   7 * Copyright (C) 2017-2018 CTERA Networks. All Rights Reserved.
   8 */
   9
  10#include <linux/fs.h>
  11#include <linux/cred.h>
  12#include <linux/mount.h>
  13#include <linux/namei.h>
  14#include <linux/xattr.h>
  15#include <linux/exportfs.h>
  16#include <linux/ratelimit.h>
  17#include "overlayfs.h"
  18
  19static int ovl_encode_maybe_copy_up(struct dentry *dentry)
  20{
  21        int err;
  22
  23        if (ovl_dentry_upper(dentry))
  24                return 0;
  25
  26        err = ovl_want_write(dentry);
  27        if (!err) {
  28                err = ovl_copy_up(dentry);
  29                ovl_drop_write(dentry);
  30        }
  31
  32        if (err) {
  33                pr_warn_ratelimited("overlayfs: failed to copy up on encode (%pd2, err=%i)\n",
  34                                    dentry, err);
  35        }
  36
  37        return err;
  38}
  39
  40/*
  41 * Before encoding a non-upper directory file handle from real layer N, we need
  42 * to check if it will be possible to reconnect an overlay dentry from the real
  43 * lower decoded dentry. This is done by following the overlay ancestry up to a
  44 * "layer N connected" ancestor and verifying that all parents along the way are
  45 * "layer N connectable". If an ancestor that is NOT "layer N connectable" is
  46 * found, we need to copy up an ancestor, which is "layer N connectable", thus
  47 * making that ancestor "layer N connected". For example:
  48 *
  49 * layer 1: /a
  50 * layer 2: /a/b/c
  51 *
  52 * The overlay dentry /a is NOT "layer 2 connectable", because if dir /a is
  53 * copied up and renamed, upper dir /a will be indexed by lower dir /a from
  54 * layer 1. The dir /a from layer 2 will never be indexed, so the algorithm (*)
  55 * in ovl_lookup_real_ancestor() will not be able to lookup a connected overlay
  56 * dentry from the connected lower dentry /a/b/c.
  57 *
  58 * To avoid this problem on decode time, we need to copy up an ancestor of
  59 * /a/b/c, which is "layer 2 connectable", on encode time. That ancestor is
  60 * /a/b. After copy up (and index) of /a/b, it will become "layer 2 connected"
  61 * and when the time comes to decode the file handle from lower dentry /a/b/c,
  62 * ovl_lookup_real_ancestor() will find the indexed ancestor /a/b and decoding
  63 * a connected overlay dentry will be accomplished.
  64 *
  65 * (*) the algorithm in ovl_lookup_real_ancestor() can be improved to lookup an
  66 * entry /a in the lower layers above layer N and find the indexed dir /a from
  67 * layer 1. If that improvement is made, then the check for "layer N connected"
  68 * will need to verify there are no redirects in lower layers above N. In the
  69 * example above, /a will be "layer 2 connectable". However, if layer 2 dir /a
  70 * is a target of a layer 1 redirect, then /a will NOT be "layer 2 connectable":
  71 *
  72 * layer 1: /A (redirect = /a)
  73 * layer 2: /a/b/c
  74 */
  75
  76/* Return the lowest layer for encoding a connectable file handle */
  77static int ovl_connectable_layer(struct dentry *dentry)
  78{
  79        struct ovl_entry *oe = OVL_E(dentry);
  80
  81        /* We can get overlay root from root of any layer */
  82        if (dentry == dentry->d_sb->s_root)
  83                return oe->numlower;
  84
  85        /*
  86         * If it's an unindexed merge dir, then it's not connectable with any
  87         * lower layer
  88         */
  89        if (ovl_dentry_upper(dentry) &&
  90            !ovl_test_flag(OVL_INDEX, d_inode(dentry)))
  91                return 0;
  92
  93        /* We can get upper/overlay path from indexed/lower dentry */
  94        return oe->lowerstack[0].layer->idx;
  95}
  96
  97/*
  98 * @dentry is "connected" if all ancestors up to root or a "connected" ancestor
  99 * have the same uppermost lower layer as the origin's layer. We may need to
 100 * copy up a "connectable" ancestor to make it "connected". A "connected" dentry
 101 * cannot become non "connected", so cache positive result in dentry flags.
 102 *
 103 * Return the connected origin layer or < 0 on error.
 104 */
 105static int ovl_connect_layer(struct dentry *dentry)
 106{
 107        struct dentry *next, *parent = NULL;
 108        int origin_layer;
 109        int err = 0;
 110
 111        if (WARN_ON(dentry == dentry->d_sb->s_root) ||
 112            WARN_ON(!ovl_dentry_lower(dentry)))
 113                return -EIO;
 114
 115        origin_layer = OVL_E(dentry)->lowerstack[0].layer->idx;
 116        if (ovl_dentry_test_flag(OVL_E_CONNECTED, dentry))
 117                return origin_layer;
 118
 119        /* Find the topmost origin layer connectable ancestor of @dentry */
 120        next = dget(dentry);
 121        for (;;) {
 122                parent = dget_parent(next);
 123                if (WARN_ON(parent == next)) {
 124                        err = -EIO;
 125                        break;
 126                }
 127
 128                /*
 129                 * If @parent is not origin layer connectable, then copy up
 130                 * @next which is origin layer connectable and we are done.
 131                 */
 132                if (ovl_connectable_layer(parent) < origin_layer) {
 133                        err = ovl_encode_maybe_copy_up(next);
 134                        break;
 135                }
 136
 137                /* If @parent is connected or indexed we are done */
 138                if (ovl_dentry_test_flag(OVL_E_CONNECTED, parent) ||
 139                    ovl_test_flag(OVL_INDEX, d_inode(parent)))
 140                        break;
 141
 142                dput(next);
 143                next = parent;
 144        }
 145
 146        dput(parent);
 147        dput(next);
 148
 149        if (!err)
 150                ovl_dentry_set_flag(OVL_E_CONNECTED, dentry);
 151
 152        return err ?: origin_layer;
 153}
 154
 155/*
 156 * We only need to encode origin if there is a chance that the same object was
 157 * encoded pre copy up and then we need to stay consistent with the same
 158 * encoding also after copy up. If non-pure upper is not indexed, then it was
 159 * copied up before NFS export was enabled. In that case we don't need to worry
 160 * about staying consistent with pre copy up encoding and we encode an upper
 161 * file handle. Overlay root dentry is a private case of non-indexed upper.
 162 *
 163 * The following table summarizes the different file handle encodings used for
 164 * different overlay object types:
 165 *
 166 *  Object type         | Encoding
 167 * --------------------------------
 168 *  Pure upper          | U
 169 *  Non-indexed upper   | U
 170 *  Indexed upper       | L (*)
 171 *  Non-upper           | L (*)
 172 *
 173 * U = upper file handle
 174 * L = lower file handle
 175 *
 176 * (*) Connecting an overlay dir from real lower dentry is not always
 177 * possible when there are redirects in lower layers and non-indexed merge dirs.
 178 * To mitigate those case, we may copy up the lower dir ancestor before encode
 179 * a lower dir file handle.
 180 *
 181 * Return 0 for upper file handle, > 0 for lower file handle or < 0 on error.
 182 */
 183static int ovl_check_encode_origin(struct dentry *dentry)
 184{
 185        struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
 186
 187        /* Upper file handle for pure upper */
 188        if (!ovl_dentry_lower(dentry))
 189                return 0;
 190
 191        /*
 192         * Upper file handle for non-indexed upper.
 193         *
 194         * Root is never indexed, so if there's an upper layer, encode upper for
 195         * root.
 196         */
 197        if (ovl_dentry_upper(dentry) &&
 198            !ovl_test_flag(OVL_INDEX, d_inode(dentry)))
 199                return 0;
 200
 201        /*
 202         * Decoding a merge dir, whose origin's ancestor is under a redirected
 203         * lower dir or under a non-indexed upper is not always possible.
 204         * ovl_connect_layer() will try to make origin's layer "connected" by
 205         * copying up a "connectable" ancestor.
 206         */
 207        if (d_is_dir(dentry) && ofs->upper_mnt)
 208                return ovl_connect_layer(dentry);
 209
 210        /* Lower file handle for indexed and non-upper dir/non-dir */
 211        return 1;
 212}
 213
 214static int ovl_d_to_fh(struct dentry *dentry, char *buf, int buflen)
 215{
 216        struct ovl_fh *fh = NULL;
 217        int err, enc_lower;
 218
 219        /*
 220         * Check if we should encode a lower or upper file handle and maybe
 221         * copy up an ancestor to make lower file handle connectable.
 222         */
 223        err = enc_lower = ovl_check_encode_origin(dentry);
 224        if (enc_lower < 0)
 225                goto fail;
 226
 227        /* Encode an upper or lower file handle */
 228        fh = ovl_encode_real_fh(enc_lower ? ovl_dentry_lower(dentry) :
 229                                ovl_dentry_upper(dentry), !enc_lower);
 230        if (IS_ERR(fh))
 231                return PTR_ERR(fh);
 232
 233        err = -EOVERFLOW;
 234        if (fh->len > buflen)
 235                goto fail;
 236
 237        memcpy(buf, (char *)fh, fh->len);
 238        err = fh->len;
 239
 240out:
 241        kfree(fh);
 242        return err;
 243
 244fail:
 245        pr_warn_ratelimited("overlayfs: failed to encode file handle (%pd2, err=%i, buflen=%d, len=%d, type=%d)\n",
 246                            dentry, err, buflen, fh ? (int)fh->len : 0,
 247                            fh ? fh->type : 0);
 248        goto out;
 249}
 250
 251static int ovl_dentry_to_fh(struct dentry *dentry, u32 *fid, int *max_len)
 252{
 253        int res, len = *max_len << 2;
 254
 255        res = ovl_d_to_fh(dentry, (char *)fid, len);
 256        if (res <= 0)
 257                return FILEID_INVALID;
 258
 259        len = res;
 260
 261        /* Round up to dwords */
 262        *max_len = (len + 3) >> 2;
 263        return OVL_FILEID;
 264}
 265
 266static int ovl_encode_fh(struct inode *inode, u32 *fid, int *max_len,
 267                         struct inode *parent)
 268{
 269        struct dentry *dentry;
 270        int type;
 271
 272        /* TODO: encode connectable file handles */
 273        if (parent)
 274                return FILEID_INVALID;
 275
 276        dentry = d_find_any_alias(inode);
 277        if (WARN_ON(!dentry))
 278                return FILEID_INVALID;
 279
 280        type = ovl_dentry_to_fh(dentry, fid, max_len);
 281
 282        dput(dentry);
 283        return type;
 284}
 285
 286/*
 287 * Find or instantiate an overlay dentry from real dentries and index.
 288 */
 289static struct dentry *ovl_obtain_alias(struct super_block *sb,
 290                                       struct dentry *upper_alias,
 291                                       struct ovl_path *lowerpath,
 292                                       struct dentry *index)
 293{
 294        struct dentry *lower = lowerpath ? lowerpath->dentry : NULL;
 295        struct dentry *upper = upper_alias ?: index;
 296        struct dentry *dentry;
 297        struct inode *inode;
 298        struct ovl_entry *oe;
 299        struct ovl_inode_params oip = {
 300                .lowerpath = lowerpath,
 301                .index = index,
 302                .numlower = !!lower
 303        };
 304
 305        /* We get overlay directory dentries with ovl_lookup_real() */
 306        if (d_is_dir(upper ?: lower))
 307                return ERR_PTR(-EIO);
 308
 309        oip.upperdentry = dget(upper);
 310        inode = ovl_get_inode(sb, &oip);
 311        if (IS_ERR(inode)) {
 312                dput(upper);
 313                return ERR_CAST(inode);
 314        }
 315
 316        if (upper)
 317                ovl_set_flag(OVL_UPPERDATA, inode);
 318
 319        dentry = d_find_any_alias(inode);
 320        if (!dentry) {
 321                dentry = d_alloc_anon(inode->i_sb);
 322                if (!dentry)
 323                        goto nomem;
 324                oe = ovl_alloc_entry(lower ? 1 : 0);
 325                if (!oe)
 326                        goto nomem;
 327
 328                if (lower) {
 329                        oe->lowerstack->dentry = dget(lower);
 330                        oe->lowerstack->layer = lowerpath->layer;
 331                }
 332                dentry->d_fsdata = oe;
 333                if (upper_alias)
 334                        ovl_dentry_set_upper_alias(dentry);
 335        }
 336
 337        return d_instantiate_anon(dentry, inode);
 338
 339nomem:
 340        iput(inode);
 341        dput(dentry);
 342        return ERR_PTR(-ENOMEM);
 343}
 344
 345/* Get the upper or lower dentry in stach whose on layer @idx */
 346static struct dentry *ovl_dentry_real_at(struct dentry *dentry, int idx)
 347{
 348        struct ovl_entry *oe = dentry->d_fsdata;
 349        int i;
 350
 351        if (!idx)
 352                return ovl_dentry_upper(dentry);
 353
 354        for (i = 0; i < oe->numlower; i++) {
 355                if (oe->lowerstack[i].layer->idx == idx)
 356                        return oe->lowerstack[i].dentry;
 357        }
 358
 359        return NULL;
 360}
 361
 362/*
 363 * Lookup a child overlay dentry to get a connected overlay dentry whose real
 364 * dentry is @real. If @real is on upper layer, we lookup a child overlay
 365 * dentry with the same name as the real dentry. Otherwise, we need to consult
 366 * index for lookup.
 367 */
 368static struct dentry *ovl_lookup_real_one(struct dentry *connected,
 369                                          struct dentry *real,
 370                                          struct ovl_layer *layer)
 371{
 372        struct inode *dir = d_inode(connected);
 373        struct dentry *this, *parent = NULL;
 374        struct name_snapshot name;
 375        int err;
 376
 377        /*
 378         * Lookup child overlay dentry by real name. The dir mutex protects us
 379         * from racing with overlay rename. If the overlay dentry that is above
 380         * real has already been moved to a parent that is not under the
 381         * connected overlay dir, we return -ECHILD and restart the lookup of
 382         * connected real path from the top.
 383         */
 384        inode_lock_nested(dir, I_MUTEX_PARENT);
 385        err = -ECHILD;
 386        parent = dget_parent(real);
 387        if (ovl_dentry_real_at(connected, layer->idx) != parent)
 388                goto fail;
 389
 390        /*
 391         * We also need to take a snapshot of real dentry name to protect us
 392         * from racing with underlying layer rename. In this case, we don't
 393         * care about returning ESTALE, only from dereferencing a free name
 394         * pointer because we hold no lock on the real dentry.
 395         */
 396        take_dentry_name_snapshot(&name, real);
 397        this = lookup_one_len(name.name.name, connected, name.name.len);
 398        err = PTR_ERR(this);
 399        if (IS_ERR(this)) {
 400                goto fail;
 401        } else if (!this || !this->d_inode) {
 402                dput(this);
 403                err = -ENOENT;
 404                goto fail;
 405        } else if (ovl_dentry_real_at(this, layer->idx) != real) {
 406                dput(this);
 407                err = -ESTALE;
 408                goto fail;
 409        }
 410
 411out:
 412        release_dentry_name_snapshot(&name);
 413        dput(parent);
 414        inode_unlock(dir);
 415        return this;
 416
 417fail:
 418        pr_warn_ratelimited("overlayfs: failed to lookup one by real (%pd2, layer=%d, connected=%pd2, err=%i)\n",
 419                            real, layer->idx, connected, err);
 420        this = ERR_PTR(err);
 421        goto out;
 422}
 423
 424static struct dentry *ovl_lookup_real(struct super_block *sb,
 425                                      struct dentry *real,
 426                                      struct ovl_layer *layer);
 427
 428/*
 429 * Lookup an indexed or hashed overlay dentry by real inode.
 430 */
 431static struct dentry *ovl_lookup_real_inode(struct super_block *sb,
 432                                            struct dentry *real,
 433                                            struct ovl_layer *layer)
 434{
 435        struct ovl_fs *ofs = sb->s_fs_info;
 436        struct ovl_layer upper_layer = { .mnt = ofs->upper_mnt };
 437        struct dentry *index = NULL;
 438        struct dentry *this = NULL;
 439        struct inode *inode;
 440
 441        /*
 442         * Decoding upper dir from index is expensive, so first try to lookup
 443         * overlay dentry in inode/dcache.
 444         */
 445        inode = ovl_lookup_inode(sb, real, !layer->idx);
 446        if (IS_ERR(inode))
 447                return ERR_CAST(inode);
 448        if (inode) {
 449                this = d_find_any_alias(inode);
 450                iput(inode);
 451        }
 452
 453        /*
 454         * For decoded lower dir file handle, lookup index by origin to check
 455         * if lower dir was copied up and and/or removed.
 456         */
 457        if (!this && layer->idx && ofs->indexdir && !WARN_ON(!d_is_dir(real))) {
 458                index = ovl_lookup_index(ofs, NULL, real, false);
 459                if (IS_ERR(index))
 460                        return index;
 461        }
 462
 463        /* Get connected upper overlay dir from index */
 464        if (index) {
 465                struct dentry *upper = ovl_index_upper(ofs, index);
 466
 467                dput(index);
 468                if (IS_ERR_OR_NULL(upper))
 469                        return upper;
 470
 471                /*
 472                 * ovl_lookup_real() in lower layer may call recursively once to
 473                 * ovl_lookup_real() in upper layer. The first level call walks
 474                 * back lower parents to the topmost indexed parent. The second
 475                 * recursive call walks back from indexed upper to the topmost
 476                 * connected/hashed upper parent (or up to root).
 477                 */
 478                this = ovl_lookup_real(sb, upper, &upper_layer);
 479                dput(upper);
 480        }
 481
 482        if (IS_ERR_OR_NULL(this))
 483                return this;
 484
 485        if (WARN_ON(ovl_dentry_real_at(this, layer->idx) != real)) {
 486                dput(this);
 487                this = ERR_PTR(-EIO);
 488        }
 489
 490        return this;
 491}
 492
 493/*
 494 * Lookup an indexed or hashed overlay dentry, whose real dentry is an
 495 * ancestor of @real.
 496 */
 497static struct dentry *ovl_lookup_real_ancestor(struct super_block *sb,
 498                                               struct dentry *real,
 499                                               struct ovl_layer *layer)
 500{
 501        struct dentry *next, *parent = NULL;
 502        struct dentry *ancestor = ERR_PTR(-EIO);
 503
 504        if (real == layer->mnt->mnt_root)
 505                return dget(sb->s_root);
 506
 507        /* Find the topmost indexed or hashed ancestor */
 508        next = dget(real);
 509        for (;;) {
 510                parent = dget_parent(next);
 511
 512                /*
 513                 * Lookup a matching overlay dentry in inode/dentry
 514                 * cache or in index by real inode.
 515                 */
 516                ancestor = ovl_lookup_real_inode(sb, next, layer);
 517                if (ancestor)
 518                        break;
 519
 520                if (parent == layer->mnt->mnt_root) {
 521                        ancestor = dget(sb->s_root);
 522                        break;
 523                }
 524
 525                /*
 526                 * If @real has been moved out of the layer root directory,
 527                 * we will eventully hit the real fs root. This cannot happen
 528                 * by legit overlay rename, so we return error in that case.
 529                 */
 530                if (parent == next) {
 531                        ancestor = ERR_PTR(-EXDEV);
 532                        break;
 533                }
 534
 535                dput(next);
 536                next = parent;
 537        }
 538
 539        dput(parent);
 540        dput(next);
 541
 542        return ancestor;
 543}
 544
 545/*
 546 * Lookup a connected overlay dentry whose real dentry is @real.
 547 * If @real is on upper layer, we lookup a child overlay dentry with the same
 548 * path the real dentry. Otherwise, we need to consult index for lookup.
 549 */
 550static struct dentry *ovl_lookup_real(struct super_block *sb,
 551                                      struct dentry *real,
 552                                      struct ovl_layer *layer)
 553{
 554        struct dentry *connected;
 555        int err = 0;
 556
 557        connected = ovl_lookup_real_ancestor(sb, real, layer);
 558        if (IS_ERR(connected))
 559                return connected;
 560
 561        while (!err) {
 562                struct dentry *next, *this;
 563                struct dentry *parent = NULL;
 564                struct dentry *real_connected = ovl_dentry_real_at(connected,
 565                                                                   layer->idx);
 566
 567                if (real_connected == real)
 568                        break;
 569
 570                /* Find the topmost dentry not yet connected */
 571                next = dget(real);
 572                for (;;) {
 573                        parent = dget_parent(next);
 574
 575                        if (parent == real_connected)
 576                                break;
 577
 578                        /*
 579                         * If real has been moved out of 'real_connected',
 580                         * we will not find 'real_connected' and hit the layer
 581                         * root. In that case, we need to restart connecting.
 582                         * This game can go on forever in the worst case. We
 583                         * may want to consider taking s_vfs_rename_mutex if
 584                         * this happens more than once.
 585                         */
 586                        if (parent == layer->mnt->mnt_root) {
 587                                dput(connected);
 588                                connected = dget(sb->s_root);
 589                                break;
 590                        }
 591
 592                        /*
 593                         * If real file has been moved out of the layer root
 594                         * directory, we will eventully hit the real fs root.
 595                         * This cannot happen by legit overlay rename, so we
 596                         * return error in that case.
 597                         */
 598                        if (parent == next) {
 599                                err = -EXDEV;
 600                                break;
 601                        }
 602
 603                        dput(next);
 604                        next = parent;
 605                }
 606
 607                if (!err) {
 608                        this = ovl_lookup_real_one(connected, next, layer);
 609                        if (IS_ERR(this))
 610                                err = PTR_ERR(this);
 611
 612                        /*
 613                         * Lookup of child in overlay can fail when racing with
 614                         * overlay rename of child away from 'connected' parent.
 615                         * In this case, we need to restart the lookup from the
 616                         * top, because we cannot trust that 'real_connected' is
 617                         * still an ancestor of 'real'. There is a good chance
 618                         * that the renamed overlay ancestor is now in cache, so
 619                         * ovl_lookup_real_ancestor() will find it and we can
 620                         * continue to connect exactly from where lookup failed.
 621                         */
 622                        if (err == -ECHILD) {
 623                                this = ovl_lookup_real_ancestor(sb, real,
 624                                                                layer);
 625                                err = PTR_ERR_OR_ZERO(this);
 626                        }
 627                        if (!err) {
 628                                dput(connected);
 629                                connected = this;
 630                        }
 631                }
 632
 633                dput(parent);
 634                dput(next);
 635        }
 636
 637        if (err)
 638                goto fail;
 639
 640        return connected;
 641
 642fail:
 643        pr_warn_ratelimited("overlayfs: failed to lookup by real (%pd2, layer=%d, connected=%pd2, err=%i)\n",
 644                            real, layer->idx, connected, err);
 645        dput(connected);
 646        return ERR_PTR(err);
 647}
 648
 649/*
 650 * Get an overlay dentry from upper/lower real dentries and index.
 651 */
 652static struct dentry *ovl_get_dentry(struct super_block *sb,
 653                                     struct dentry *upper,
 654                                     struct ovl_path *lowerpath,
 655                                     struct dentry *index)
 656{
 657        struct ovl_fs *ofs = sb->s_fs_info;
 658        struct ovl_layer upper_layer = { .mnt = ofs->upper_mnt };
 659        struct ovl_layer *layer = upper ? &upper_layer : lowerpath->layer;
 660        struct dentry *real = upper ?: (index ?: lowerpath->dentry);
 661
 662        /*
 663         * Obtain a disconnected overlay dentry from a non-dir real dentry
 664         * and index.
 665         */
 666        if (!d_is_dir(real))
 667                return ovl_obtain_alias(sb, upper, lowerpath, index);
 668
 669        /* Removed empty directory? */
 670        if ((real->d_flags & DCACHE_DISCONNECTED) || d_unhashed(real))
 671                return ERR_PTR(-ENOENT);
 672
 673        /*
 674         * If real dentry is connected and hashed, get a connected overlay
 675         * dentry whose real dentry is @real.
 676         */
 677        return ovl_lookup_real(sb, real, layer);
 678}
 679
 680static struct dentry *ovl_upper_fh_to_d(struct super_block *sb,
 681                                        struct ovl_fh *fh)
 682{
 683        struct ovl_fs *ofs = sb->s_fs_info;
 684        struct dentry *dentry;
 685        struct dentry *upper;
 686
 687        if (!ofs->upper_mnt)
 688                return ERR_PTR(-EACCES);
 689
 690        upper = ovl_decode_real_fh(fh, ofs->upper_mnt, true);
 691        if (IS_ERR_OR_NULL(upper))
 692                return upper;
 693
 694        dentry = ovl_get_dentry(sb, upper, NULL, NULL);
 695        dput(upper);
 696
 697        return dentry;
 698}
 699
 700static struct dentry *ovl_lower_fh_to_d(struct super_block *sb,
 701                                        struct ovl_fh *fh)
 702{
 703        struct ovl_fs *ofs = sb->s_fs_info;
 704        struct ovl_path origin = { };
 705        struct ovl_path *stack = &origin;
 706        struct dentry *dentry = NULL;
 707        struct dentry *index = NULL;
 708        struct inode *inode;
 709        int err;
 710
 711        /* First lookup overlay inode in inode cache by origin fh */
 712        err = ovl_check_origin_fh(ofs, fh, false, NULL, &stack);
 713        if (err)
 714                return ERR_PTR(err);
 715
 716        if (!d_is_dir(origin.dentry) ||
 717            !(origin.dentry->d_flags & DCACHE_DISCONNECTED)) {
 718                inode = ovl_lookup_inode(sb, origin.dentry, false);
 719                err = PTR_ERR(inode);
 720                if (IS_ERR(inode))
 721                        goto out_err;
 722                if (inode) {
 723                        dentry = d_find_any_alias(inode);
 724                        iput(inode);
 725                        if (dentry)
 726                                goto out;
 727                }
 728        }
 729
 730        /* Then lookup indexed upper/whiteout by origin fh */
 731        if (ofs->indexdir) {
 732                index = ovl_get_index_fh(ofs, fh);
 733                err = PTR_ERR(index);
 734                if (IS_ERR(index)) {
 735                        index = NULL;
 736                        goto out_err;
 737                }
 738        }
 739
 740        /* Then try to get a connected upper dir by index */
 741        if (index && d_is_dir(index)) {
 742                struct dentry *upper = ovl_index_upper(ofs, index);
 743
 744                err = PTR_ERR(upper);
 745                if (IS_ERR_OR_NULL(upper))
 746                        goto out_err;
 747
 748                dentry = ovl_get_dentry(sb, upper, NULL, NULL);
 749                dput(upper);
 750                goto out;
 751        }
 752
 753        /* Find origin.dentry again with ovl_acceptable() layer check */
 754        if (d_is_dir(origin.dentry)) {
 755                dput(origin.dentry);
 756                origin.dentry = NULL;
 757                err = ovl_check_origin_fh(ofs, fh, true, NULL, &stack);
 758                if (err)
 759                        goto out_err;
 760        }
 761        if (index) {
 762                err = ovl_verify_origin(index, origin.dentry, false);
 763                if (err)
 764                        goto out_err;
 765        }
 766
 767        /* Get a connected non-upper dir or disconnected non-dir */
 768        dentry = ovl_get_dentry(sb, NULL, &origin, index);
 769
 770out:
 771        dput(origin.dentry);
 772        dput(index);
 773        return dentry;
 774
 775out_err:
 776        dentry = ERR_PTR(err);
 777        goto out;
 778}
 779
 780static struct dentry *ovl_fh_to_dentry(struct super_block *sb, struct fid *fid,
 781                                       int fh_len, int fh_type)
 782{
 783        struct dentry *dentry = NULL;
 784        struct ovl_fh *fh = (struct ovl_fh *) fid;
 785        int len = fh_len << 2;
 786        unsigned int flags = 0;
 787        int err;
 788
 789        err = -EINVAL;
 790        if (fh_type != OVL_FILEID)
 791                goto out_err;
 792
 793        err = ovl_check_fh_len(fh, len);
 794        if (err)
 795                goto out_err;
 796
 797        flags = fh->flags;
 798        dentry = (flags & OVL_FH_FLAG_PATH_UPPER) ?
 799                 ovl_upper_fh_to_d(sb, fh) :
 800                 ovl_lower_fh_to_d(sb, fh);
 801        err = PTR_ERR(dentry);
 802        if (IS_ERR(dentry) && err != -ESTALE)
 803                goto out_err;
 804
 805        return dentry;
 806
 807out_err:
 808        pr_warn_ratelimited("overlayfs: failed to decode file handle (len=%d, type=%d, flags=%x, err=%i)\n",
 809                            len, fh_type, flags, err);
 810        return ERR_PTR(err);
 811}
 812
 813static struct dentry *ovl_fh_to_parent(struct super_block *sb, struct fid *fid,
 814                                       int fh_len, int fh_type)
 815{
 816        pr_warn_ratelimited("overlayfs: connectable file handles not supported; use 'no_subtree_check' exportfs option.\n");
 817        return ERR_PTR(-EACCES);
 818}
 819
 820static int ovl_get_name(struct dentry *parent, char *name,
 821                        struct dentry *child)
 822{
 823        /*
 824         * ovl_fh_to_dentry() returns connected dir overlay dentries and
 825         * ovl_fh_to_parent() is not implemented, so we should not get here.
 826         */
 827        WARN_ON_ONCE(1);
 828        return -EIO;
 829}
 830
 831static struct dentry *ovl_get_parent(struct dentry *dentry)
 832{
 833        /*
 834         * ovl_fh_to_dentry() returns connected dir overlay dentries, so we
 835         * should not get here.
 836         */
 837        WARN_ON_ONCE(1);
 838        return ERR_PTR(-EIO);
 839}
 840
 841const struct export_operations ovl_export_operations = {
 842        .encode_fh      = ovl_encode_fh,
 843        .fh_to_dentry   = ovl_fh_to_dentry,
 844        .fh_to_parent   = ovl_fh_to_parent,
 845        .get_name       = ovl_get_name,
 846        .get_parent     = ovl_get_parent,
 847};
 848