Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1000086ybl; Fri, 24 Jan 2020 13:31:14 -0800 (PST) X-Google-Smtp-Source: APXvYqyt8brUsJ99AcY6Ejf1SPdGv95HA48eBY+3mXsxdZmboPzQdZlvvkfZtYLtc2Efdvev6Bfg X-Received: by 2002:a9d:66ca:: with SMTP id t10mr4198511otm.352.1579901474697; Fri, 24 Jan 2020 13:31:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579901474; cv=none; d=google.com; s=arc-20160816; b=Am5GjRkcTtgAkyRqUhdUywkbPRSHPh+SHbQdrz7n4undnWNNzOWbLD/hilunQiaLOf FzWUzArn6P7W3fsosPsYUTHSV6XUiUFNN5X8xDn5rBExUsv9havDIzu68s3MSV+tmwOp nXb7DVJzKPQ2fG6nBYa4FeUHK3b3FCpBjbCq1KsamshJkT8i2fcsfn5obpmK0OfFhXnI +XjUrfXg08ljGlW6kCsuTrupfc2fYeHv2WdBaNFvZtE5F0fpEdhlSzo6fdQ+j/Z4sAw5 ADAn5NKoBwum0S0IHBBzPgDr8rhxfD+/gngHFhqnKRhEN5b/US38Z563KDKgDCkLiv5H 9Qfg== 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 :message-id:date:subject:cc:to:from; bh=YcwyPAFjSUef256jVd/LqgAlAGJ5MT3dwIwcaJOlvSc=; b=Vm3SRzxF8RN3gMWmNIQh3a1eGLvOopO8Fu+CLsri2A4Nfzl8FSJhb6XozGLSiG1Ufr ImyzRUpd6ZxiJCedyDbLYylP+4jWKryyT4ZAiOcs82wWmjfeyS2E1D+nuPJT1cCgZKrq afNWuIrx7OnXcY9Nxh9iB3IXQRKcwAJu0FwfjP1RlUYfUu92omGn+C2mRGpV6MzIuzz/ ETpL0IddP1qa2UCabNaLRDKTuX7ksjbu/kRd/Ez54JTFHHSNZXO+OZvU0pPUfs0N3PI4 9Cqiq3OVOe79IkMLYj/2thNwH+1V9D9un+kxYgbtUPI2UPtRldpwWx35cKkowoG47O7B vQLQ== 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 m8si341578oim.180.2020.01.24.13.31.02; Fri, 24 Jan 2020 13:31:14 -0800 (PST) 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 S2404103AbgAXULq (ORCPT + 99 others); Fri, 24 Jan 2020 15:11:46 -0500 Received: from 9.mo179.mail-out.ovh.net ([46.105.76.148]:42077 "EHLO 9.mo179.mail-out.ovh.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2403994AbgAXULq (ORCPT ); Fri, 24 Jan 2020 15:11:46 -0500 X-Greylist: delayed 477 seconds by postgrey-1.27 at vger.kernel.org; Fri, 24 Jan 2020 15:11:43 EST Received: from player746.ha.ovh.net (unknown [10.108.57.141]) by mo179.mail-out.ovh.net (Postfix) with ESMTP id EB39E157B18 for ; Fri, 24 Jan 2020 21:03:44 +0100 (CET) Received: from sk2.org (unknown [77.240.182.90]) (Authenticated sender: steve@sk2.org) by player746.ha.ovh.net (Postfix) with ESMTPSA id 2A304EB0DCF2; Fri, 24 Jan 2020 20:03:38 +0000 (UTC) From: Stephen Kitt To: Philipp Reisner , Lars Ellenberg , Jens Axboe , drbd-dev@lists.linbit.com Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, Stephen Kitt Subject: [PATCH] drbd fifo_alloc: use struct_size Date: Fri, 24 Jan 2020 21:03:07 +0100 Message-Id: <20200124200307.1808593-1-steve@sk2.org> X-Mailer: git-send-email 2.24.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Ovh-Tracer-Id: 5593470739511987563 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: -100 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedugedrvdeggddufedtucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuqfggjfdpvefjgfevmfevgfenuceurghilhhouhhtmecuhedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvufffkffoggfgsedtkeertdertddtnecuhfhrohhmpefuthgvphhhvghnucfmihhtthcuoehsthgvvhgvsehskhdvrdhorhhgqeenucfkpheptddrtddrtddrtddpjeejrddvgedtrddukedvrdeltdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhhouggvpehsmhhtphdqohhuthdphhgvlhhopehplhgrhigvrhejgeeirdhhrgdrohhvhhdrnhgvthdpihhnvghtpedtrddtrddtrddtpdhmrghilhhfrhhomhepshhtvghvvgesshhkvddrohhrghdprhgtphhtthhopehlihhnuhigqdhkvghrnhgvlhesvhhgvghrrdhkvghrnhgvlhdrohhrgh Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Switching to struct_size for the allocation in fifo_alloc avoids hard-coding the type of fifo_buffer.values in fifo_alloc. It also provides overflow protection; to avoid pessimistic code being generated by the compiler as a result, this patch also switches fifo_size to unsigned, propagating the change as appropriate. Signed-off-by: Stephen Kitt --- drivers/block/drbd/drbd_int.h | 2 +- drivers/block/drbd/drbd_nl.c | 3 ++- drivers/block/drbd/drbd_receiver.c | 2 +- drivers/block/drbd/drbd_worker.c | 4 ++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index ddbf56014c51..aae99a2d7bd4 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h @@ -622,7 +622,7 @@ struct fifo_buffer { int total; /* sum of all values */ int values[0]; }; -extern struct fifo_buffer *fifo_alloc(int fifo_size); +extern struct fifo_buffer *fifo_alloc(unsigned int fifo_size); /* flag bits per connection */ enum { diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index de2f94d0103a..da4a3ebe04ef 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -1575,7 +1575,8 @@ int drbd_adm_disk_opts(struct sk_buff *skb, struct genl_info *info) struct drbd_device *device; struct disk_conf *new_disk_conf, *old_disk_conf; struct fifo_buffer *old_plan = NULL, *new_plan = NULL; - int err, fifo_size; + int err; + unsigned int fifo_size; retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); if (!adm_ctx.reply_skb) diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index 2b3103c30857..79e216446030 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -3887,7 +3887,7 @@ static int receive_SyncParam(struct drbd_connection *connection, struct packet_i struct disk_conf *old_disk_conf = NULL, *new_disk_conf = NULL; const int apv = connection->agreed_pro_version; struct fifo_buffer *old_plan = NULL, *new_plan = NULL; - int fifo_size = 0; + unsigned int fifo_size = 0; int err; peer_device = conn_peer_device(connection, pi->vnr); diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c index 5bdcc70ad589..b7f605c6e231 100644 --- a/drivers/block/drbd/drbd_worker.c +++ b/drivers/block/drbd/drbd_worker.c @@ -482,11 +482,11 @@ static void fifo_add_val(struct fifo_buffer *fb, int value) fb->values[i] += value; } -struct fifo_buffer *fifo_alloc(int fifo_size) +struct fifo_buffer *fifo_alloc(unsigned int fifo_size) { struct fifo_buffer *fb; - fb = kzalloc(sizeof(struct fifo_buffer) + sizeof(int) * fifo_size, GFP_NOIO); + fb = kzalloc(struct_size(fb, values, fifo_size), GFP_NOIO); if (!fb) return NULL; -- 2.24.1