Received: by 2002:ac0:adb4:0:0:0:0:0 with SMTP id o49-v6csp6111imb; Tue, 10 Jul 2018 19:27:44 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdHFUP0zw6xFIfRQiNL6Fd380/SloRmc9oCtwzgF8Dl+qVSIhuiB+5WhKF9z7wFPlqV4Kv1 X-Received: by 2002:a17:902:8e87:: with SMTP id bg7-v6mr26883505plb.129.1531276064424; Tue, 10 Jul 2018 19:27:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531276064; cv=none; d=google.com; s=arc-20160816; b=CTVyJcNzBSivuNsH4UVSxFPiGuOlSovoga22/wdMVxhoxOotMN/zBxGm50naN+DuRJ weVob/zrgIxJJguJAAfveOSmQoIls8nSDfXSR5q2h+C91zYUduly8q4/At4cfJLO5aVf QxZiK/pYIE3GvinNI/MbLcM4O2v+qFAemKjdVokNxHoM1mMAxLWAxxGH43+G+ffykrg5 PQ0VPlRfeZxIwg5lrHZcOrZXjv+rtDJ53goMoJPJ+XeZ1n8YSkzZsV4Pe73jNKao1vqy Vx4mmLP3qXuOm05jBSYO7aXkTi4kTsT3tldlnJMB7sUEAejd0Nk1Oz1luk7NfLPK3YcQ +0kA== 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=qsntcwJXMpCLULR37YbRkRYDZq5Ur7vP1qzxoSUSB4E=; b=D+MXLivj+uiB3s/NbAzdOE1LV1hltUw4ukF5qZ7pKZiHH75qPwvqJLPFvdIcT9WWPO szlNew7ugLHeXTlkvpWljdPjeLDZF4xd6AES8wwUl83kHXwQ2R2CF6Kuq16i/+SqKiBG Otz5/PimRNa/lzfL92emcbOqO0ND0mw40lHdPk0XMIyjmIyQegxHDJKVANunCzVKaw9w 01BPt7WnNw4A+I055nOucYVdWAVQ3xhenB26ZI+wKlhBQleWaetwYaaegzVx/LYAr6+b 3be+ShxeXkn0ZC/XCNI1kMZb5WYEtLrt4wrNr0ScJZUd4UHemMKoZwtLcpR6K45K4kgp f7MQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g4-v6si16832572pgs.340.2018.07.10.19.27.29; Tue, 10 Jul 2018 19:27:44 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732909AbeGKC1Z (ORCPT + 99 others); Tue, 10 Jul 2018 22:27:25 -0400 Received: from zeniv.linux.org.uk ([195.92.253.2]:45506 "EHLO ZenIV.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732368AbeGKCYE (ORCPT ); Tue, 10 Jul 2018 22:24:04 -0400 Received: from viro by ZenIV.linux.org.uk with local (Exim 4.87 #1 (Red Hat Linux)) id 1fd4la-0003HP-A4; Wed, 11 Jul 2018 02:22:06 +0000 From: Al Viro To: Linus Torvalds Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Miklos Szeredi Subject: [RFC][PATCH 01/42] drm_mode_create_lease_ioctl(): fix open-coded filp_clone_open() Date: Wed, 11 Jul 2018 03:21:25 +0100 Message-Id: <20180711022206.12571-1-viro@ZenIV.linux.org.uk> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20180711021136.GN30522@ZenIV.linux.org.uk> References: <20180711021136.GN30522@ZenIV.linux.org.uk> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Al Viro Failure of ->open() should *not* be followed by fput(). Fixed by using filp_clone_open(), which gets the cleanups right. Signed-off-by: Al Viro --- drivers/gpu/drm/drm_lease.c | 16 +--------------- fs/internal.h | 1 - include/linux/fs.h | 1 + 3 files changed, 2 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/drm_lease.c b/drivers/gpu/drm/drm_lease.c index 50c73c0a20b9..d638c0fb3418 100644 --- a/drivers/gpu/drm/drm_lease.c +++ b/drivers/gpu/drm/drm_lease.c @@ -553,24 +553,13 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev, /* Clone the lessor file to create a new file for us */ DRM_DEBUG_LEASE("Allocating lease file\n"); - path_get(&lessor_file->f_path); - lessee_file = alloc_file(&lessor_file->f_path, - lessor_file->f_mode, - fops_get(lessor_file->f_inode->i_fop)); - + lessee_file = filp_clone_open(lessor_file); if (IS_ERR(lessee_file)) { ret = PTR_ERR(lessee_file); goto out_lessee; } - /* Initialize the new file for DRM */ - DRM_DEBUG_LEASE("Initializing the file with %p\n", lessee_file->f_op->open); - ret = lessee_file->f_op->open(lessee_file->f_inode, lessee_file); - if (ret) - goto out_lessee_file; - lessee_priv = lessee_file->private_data; - /* Change the file to a master one */ drm_master_put(&lessee_priv->master); lessee_priv->master = lessee; @@ -588,9 +577,6 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev, DRM_DEBUG_LEASE("drm_mode_create_lease_ioctl succeeded\n"); return 0; -out_lessee_file: - fput(lessee_file); - out_lessee: drm_master_put(&lessee); diff --git a/fs/internal.h b/fs/internal.h index 980d005b21b4..5645b4ebf494 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -127,7 +127,6 @@ int do_fchownat(int dfd, const char __user *filename, uid_t user, gid_t group, extern int open_check_o_direct(struct file *f); extern int vfs_open(const struct path *, struct file *, const struct cred *); -extern struct file *filp_clone_open(struct file *); /* * inode.c diff --git a/include/linux/fs.h b/include/linux/fs.h index 5c91108846db..aa9b4c169ed2 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2422,6 +2422,7 @@ extern struct file *filp_open(const char *, int, umode_t); extern struct file *file_open_root(struct dentry *, struct vfsmount *, const char *, int, umode_t); extern struct file * dentry_open(const struct path *, int, const struct cred *); +extern struct file *filp_clone_open(struct file *); extern int filp_close(struct file *, fl_owner_t id); extern struct filename *getname_flags(const char __user *, int, int *); -- 2.11.0