Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3501413imm; Tue, 29 May 2018 08:17:21 -0700 (PDT) X-Google-Smtp-Source: AB8JxZp4IboXIr1aC34Nfi/fobySV4dnEYlVU19Z4CjHbEOxQTqNa1YUcFcEnA3HApzGjpBDCfhC X-Received: by 2002:a62:1397:: with SMTP id 23-v6mr17913823pft.222.1527607041783; Tue, 29 May 2018 08:17:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527607041; cv=none; d=google.com; s=arc-20160816; b=hxqPAHc6ejjrzfmQ0mNLTBnqyIPMn3BFY+xQBTKJsddrAEnF1jwNzo0r8xKgUItv7Z vLFb1HHJTgqrmswJ3B/X+ubjrKXyQDUVDUf1I95zjaC6Ogi47DCWgTS3N8zAnygWsFm3 BjhMAWy+6LeBESsJTzGwW+MjPeVo3YF0UNGgTPuNU+8NJ8xh5OZ1dM8YoKZLiiJGF6TZ hrjY7zMFk7OLP8i8Phx90CUILsep/9HdIky7i17EDmK6G4UOnC/bDZPaEl9uYZnHxcKH XnJ+VAs+baihdllcrtzv1CRc5NoUVQY9fe3PbsIgpbK8BOmaEIG81M1snHHaiSUp2DAy CMXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=SrB5PQKRAUrOo+2hzFNx8FEYpn/hqIdJB/ShOHQplxA=; b=nY0E2v/sbNXKrir5Nylk+B9gEWc61w1JaSTw28WNBK0/negFicNUnD28qLhJKBkYT2 Xgg6KLIrHURqYwdHgB/eEitZjEB0PNLp1tqpIOrrtUfdMxvVw5rSBmdkbUoCRowf9ucU Uny0fOaSLphcqLyk/S6fStU4IXmuX411jshPs6Mv70+uLNxfnz8GCFzJWDO2Tmwm3l/C 3TCUDmy45bCtzgZ4nQQgy4QfTxdnqimqZd+IQNVuIHPwb5i2n83SFez7iRB9RcGdRPEq /1i46LpRXiYB/ptR861I/lPnS7OGYVfdH8YUIcuet4M9qhAYPKpKp6mG1gybwJNVN06h CWrQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f64-v6si32897250plf.496.2018.05.29.08.17.07; Tue, 29 May 2018 08:17:21 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935450AbeE2OnK (ORCPT + 99 others); Tue, 29 May 2018 10:43:10 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:39995 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935145AbeE2Ol6 (ORCPT ); Tue, 29 May 2018 10:41:58 -0400 Received: by mail-wm0-f68.google.com with SMTP id x2-v6so33927049wmh.5 for ; Tue, 29 May 2018 07:41:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=SrB5PQKRAUrOo+2hzFNx8FEYpn/hqIdJB/ShOHQplxA=; b=TwSGEsqAsrYFP5ziWbdg72PiQNhL4cf9K9zOFpYaJfcs9dn2oOaeZS2jDqFwXQzcTl lG97WY9XUUiXgNv7bfSuGJy2iomvzW091344t1ljr90qOcFJrKBaNcZWHgxgy0f7fJmq s7TZB3Y49e0qNNzxMcMbxA6tmF5+//u0aZayiG88rtNEZnkNYmm6u0lluxNj0lEdpPeX 849wMsMtnyy4uWJ7bWFodfCiaK0Dp2y0XSA8dX5Dnm6UURzR0mzgg5fDxZ8EuJ650jUx h+m/2P2oIJWQU1JbihT1HnHkNZhD0io0gtrh9fW+V4srsWHDUWqMaQ3efrHekWNgGcSM NTmg== X-Gm-Message-State: ALKqPwdQok/N1v6q+YVCM8dPRan98nAaTtACHn1Bha8HkRmIRBzXL6eU OAGULHn/9Hg9md7FtRL0FYoHC+sigME= X-Received: by 2002:a1c:11c3:: with SMTP id 186-v6mr13198767wmr.139.1527604917341; Tue, 29 May 2018 07:41:57 -0700 (PDT) Received: from veci.piliscsaba.redhat.com (catv-176-63-54-97.catv.broadband.hu. [176.63.54.97]) by smtp.gmail.com with ESMTPSA id q17-v6sm12572113wmf.3.2018.05.29.07.41.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 29 May 2018 07:41:56 -0700 (PDT) From: Miklos Szeredi To: linux-unionfs@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 08/11] ovl: clean up copy-up error paths Date: Tue, 29 May 2018 16:41:40 +0200 Message-Id: <20180529144143.16378-9-mszeredi@redhat.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180529144143.16378-1-mszeredi@redhat.com> References: <20180529144143.16378-1-mszeredi@redhat.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Miklos Szeredi --- fs/overlayfs/copy_up.c | 54 +++++++++++++++++--------------------------------- 1 file changed, 18 insertions(+), 36 deletions(-) diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c index 1b442c14c531..ddaddb4ce4c3 100644 --- a/fs/overlayfs/copy_up.c +++ b/fs/overlayfs/copy_up.c @@ -366,12 +366,13 @@ static int ovl_create_index(struct dentry *dentry, struct dentry *origin, return err; temp = ovl_create_temp(indexdir, OVL_CATTR(S_IFDIR | 0)); + err = PTR_ERR(temp); if (IS_ERR(temp)) - goto temp_err; + goto free_name; err = ovl_set_upper_fh(upper, temp); if (err) - goto out_cleanup; + goto out; index = lookup_one_len(name.name, indexdir, name.len); if (IS_ERR(index)) { @@ -380,23 +381,13 @@ static int ovl_create_index(struct dentry *dentry, struct dentry *origin, err = ovl_do_rename(dir, temp, dir, index, 0); dput(index); } - - if (err) - goto out_cleanup; - out: + if (err) + ovl_cleanup(dir, temp); dput(temp); +free_name: kfree(name.name); return err; - -temp_err: - err = PTR_ERR(temp); - temp = NULL; - goto out; - -out_cleanup: - ovl_cleanup(dir, temp); - goto out; } struct ovl_copy_up_ctx { @@ -476,7 +467,7 @@ static int ovl_install_temp(struct ovl_copy_up_ctx *c, struct dentry *temp, return err; } -static int ovl_get_tmpfile(struct ovl_copy_up_ctx *c, struct dentry **tempp) +static struct dentry *ovl_get_tmpfile(struct ovl_copy_up_ctx *c) { int err; struct dentry *temp; @@ -490,6 +481,7 @@ static int ovl_get_tmpfile(struct ovl_copy_up_ctx *c, struct dentry **tempp) }; err = security_inode_copy_up(c->dentry, &new_creds); + temp = ERR_PTR(err); if (err < 0) goto out; @@ -500,21 +492,13 @@ static int ovl_get_tmpfile(struct ovl_copy_up_ctx *c, struct dentry **tempp) temp = ovl_do_tmpfile(c->workdir, c->stat.mode); else temp = ovl_create_temp(c->workdir, &cattr); - if (IS_ERR(temp)) - goto temp_err; - err = 0; - *tempp = temp; out: if (new_creds) { revert_creds(old_creds); put_cred(new_creds); } - return err; - -temp_err: - err = PTR_ERR(temp); - goto out; + return temp; } static int ovl_copy_up_inode(struct ovl_copy_up_ctx *c, struct dentry *temp) @@ -564,21 +548,21 @@ static int ovl_copy_up_locked(struct ovl_copy_up_ctx *c) struct inode *udir = c->destdir->d_inode; struct inode *inode; struct dentry *newdentry = NULL; - struct dentry *temp = NULL; + struct dentry *temp; int err; - err = ovl_get_tmpfile(c, &temp); - if (err) - goto out; + temp = ovl_get_tmpfile(c); + if (IS_ERR(temp)) + return PTR_ERR(temp); err = ovl_copy_up_inode(c, temp); if (err) - goto out_cleanup; + goto out; if (S_ISDIR(c->stat.mode) && c->indexed) { err = ovl_create_index(c->dentry, c->lowerpath.dentry, temp); if (err) - goto out_cleanup; + goto out; } if (c->tmpfile) { @@ -589,7 +573,7 @@ static int ovl_copy_up_locked(struct ovl_copy_up_ctx *c) err = ovl_install_temp(c, temp, &newdentry); } if (err) - goto out_cleanup; + goto out; inode = d_inode(c->dentry); ovl_inode_update(inode, newdentry); @@ -597,13 +581,11 @@ static int ovl_copy_up_locked(struct ovl_copy_up_ctx *c) ovl_set_flag(OVL_WHITEOUTS, inode); out: + if (err && !c->tmpfile) + ovl_cleanup(d_inode(c->workdir), temp); dput(temp); return err; -out_cleanup: - if (!c->tmpfile) - ovl_cleanup(d_inode(c->workdir), temp); - goto out; } /* -- 2.14.3