Received: by 2002:a25:b794:0:0:0:0:0 with SMTP id n20csp2754276ybh; Mon, 5 Aug 2019 06:19:35 -0700 (PDT) X-Google-Smtp-Source: APXvYqwbJboGUOpxN02Ry9MIooa9WDIv3NNaQQjDjk9YNmMIVKMrENG/91W5CWZtRkm/yDnr74RW X-Received: by 2002:a17:902:724:: with SMTP id 33mr140735441pli.49.1565011175455; Mon, 05 Aug 2019 06:19:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565011175; cv=none; d=google.com; s=arc-20160816; b=wWKEAyfn22j7fRuvGE5w7W4e6RdmR158mmrQRX4BZuKh+LIHFky3YeeQ+3ABmYNjFs 8AEi2Ouv3ONrw7h5ExdbeHfXerS56cLwec7kb0ERPCldNMK9Zis6Yry7Kn0YxRocuBuL MMT45QncR7iCoQOc3kU0w0M6nwXAYh+4x8Hea+FlYBhIBaHnfIGd0NixkUd4CzWkXjjy X2jN8M4I9zeAUmUR6ZHF0CcUdRwVUrSkGfVn3W6hgZXT6rpR+WaYcyKrYWYYHE/GRHpS DGLbOz9XRYU6fH7fR136v5hHz8qKs0wtBNsgFRBexyvAt8xvfLq8KI1dAjAAV/vfX6D2 HbtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=7IpQqHICVEiHPyfR1PHVV9+wC8dgjLMoBMZMS9kuodU=; b=JfmjfeijsJzIHmDfw/A7Pthi+htTH/132gvbynlLqTO1kFvztSltBsynSZAeb66glX Hb5FrO1Vzsrgm6AWLgh9AtVkN06KfzrD+g6y6eBbsQYLFK1twwTh7csN4bwoKtcz/lak kqxafuSRKz2YkGS63dVnd4t/PthdMcbUg5MRJ7sMcYrJ98m/SYA7Zi/arKKPaClrEozj CCFurENJoxO/8kVl7AgpVkpkgO/GumMjIUbVQHioe9VSfl1UoQC1mDH7h7FO81sq7ek7 kxZDGWjKaTBjYrdP/EQrGZeVcrfUt5962d4z5Vkqnp+LBlXmLJ1YYuuyvD5VOcKj81Ly 3cxA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=lKD5VCRZ; 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 o23si47008747pfp.131.2019.08.05.06.19.19; Mon, 05 Aug 2019 06:19:35 -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; dkim=pass header.i=@kernel.org header.s=default header.b=lKD5VCRZ; 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 S1729232AbfHENFI (ORCPT + 99 others); Mon, 5 Aug 2019 09:05:08 -0400 Received: from mail.kernel.org ([198.145.29.99]:40846 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729182AbfHENE6 (ORCPT ); Mon, 5 Aug 2019 09:04:58 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A70FD2186A; Mon, 5 Aug 2019 13:04:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1565010297; bh=bJpyOeulySZKL9etX/Yrdlqo5q6ouWQR2bfZKkilyGs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lKD5VCRZ8hwxtAzN54zfBJqpACBkeyKO80WK7UhDGhqRQ4zmsSY1+5NTqJmr3mQ1y +ncummnAzjCICcqwpECadwUKc2qYdlSt19a78pYQk2My6JlXQ/UrfZwTz2tujzf28E ZWvDs61QQdxv7AuvRARKxnNYPmqiwv7FCmoDdXcM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jeff Layton , "Yan, Zheng" , Ilya Dryomov , Sasha Levin Subject: [PATCH 4.9 12/42] ceph: return -ERANGE if virtual xattr value didnt fit in buffer Date: Mon, 5 Aug 2019 15:02:38 +0200 Message-Id: <20190805124926.288381225@linuxfoundation.org> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190805124924.788666484@linuxfoundation.org> References: <20190805124924.788666484@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ Upstream commit 3b421018f48c482bdc9650f894aa1747cf90e51d ] The getxattr manpage states that we should return ERANGE if the destination buffer size is too small to hold the value. ceph_vxattrcb_layout does this internally, but we should be doing this for all vxattrs. Fix the only caller of getxattr_cb to check the returned size against the buffer length and return -ERANGE if it doesn't fit. Drop the same check in ceph_vxattrcb_layout and just rely on the caller to handle it. Signed-off-by: Jeff Layton Reviewed-by: "Yan, Zheng" Acked-by: Ilya Dryomov Signed-off-by: Ilya Dryomov Signed-off-by: Sasha Levin --- fs/ceph/xattr.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c index 75267cdd5dfd8..81144a8c09275 100644 --- a/fs/ceph/xattr.c +++ b/fs/ceph/xattr.c @@ -74,7 +74,7 @@ static size_t ceph_vxattrcb_layout(struct ceph_inode_info *ci, char *val, const char *ns_field = " pool_namespace="; char buf[128]; size_t len, total_len = 0; - int ret; + ssize_t ret; pool_ns = ceph_try_get_string(ci->i_layout.pool_ns); @@ -98,11 +98,8 @@ static size_t ceph_vxattrcb_layout(struct ceph_inode_info *ci, char *val, if (pool_ns) total_len += strlen(ns_field) + pool_ns->len; - if (!size) { - ret = total_len; - } else if (total_len > size) { - ret = -ERANGE; - } else { + ret = total_len; + if (size >= total_len) { memcpy(val, buf, len); ret = len; if (pool_name) { @@ -757,8 +754,11 @@ ssize_t __ceph_getxattr(struct inode *inode, const char *name, void *value, vxattr = ceph_match_vxattr(inode, name); if (vxattr) { err = -ENODATA; - if (!(vxattr->exists_cb && !vxattr->exists_cb(ci))) + if (!(vxattr->exists_cb && !vxattr->exists_cb(ci))) { err = vxattr->getxattr_cb(ci, value, size); + if (size && size < err) + err = -ERANGE; + } return err; } -- 2.20.1