All of lore.kernel.org
 help / color / mirror / Atom feed
From: Len Baker <len.baker@gmx.com>
To: Li Fei1 <fei1.li@intel.com>
Cc: Len Baker <len.baker@gmx.com>,
	keescook@chromium.org, gustavoars@kernel.org,
	linux-hardening@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] virt: acrn: Prefer array_syze and struct_size over open coded arithmetic
Date: Fri, 15 Oct 2021 17:52:48 +0200	[thread overview]
Message-ID: <20211015155248.GA3289@titan> (raw)
In-Reply-To: <20211012013429.GA28284@louislifei-OptiPlex-7050>

Hi Li,

On Tue, Oct 12, 2021 at 09:34:29AM +0800, Li Fei1 wrote:
> On Mon, Oct 11, 2021 at 12:39:02PM +0200, Len Baker wrote:
> > As noted in the "Deprecated Interfaces, Language Features, Attributes,
> > and Conventions" documentation [1], size calculations (especially
> > multiplication) should not be performed in memory allocator (or similar)
> > function arguments due to the risk of them overflowing. This could lead
> > to values wrapping around and a smaller allocation being made than the
> > caller was expecting. Using those allocations could lead to linear
> > overflows of heap memory and other misbehaviors.
> >
> > So, use the array_size() helper to do the arithmetic instead of the
> > argument "count * size" in the vzalloc() function.
> >
> > Also, take the opportunity to add a flexible array member of struct
> > vm_memory_region_op to the vm_memory_region_batch structure. And then,
> > change the code accordingly and use the struct_size() helper to do the
> > arithmetic instead of the argument "size + size * count" in the kzalloc
> > function.
> >
> > This code was detected with the help of Coccinelle and audited and fixed
> > manually.
> >
> > [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#open-coded-arithmetic-in-allocator-arguments
> >
> > Signed-off-by: Len Baker <len.baker@gmx.com>
>
> Hi Baker
>
> Thanks for helping us to fix this issue. This patch looks good to me.
> Please add Signed-off-by: Fei Li <fei1.li@intel.com>.

I can't add the "Signed-off-by" tag by myself. However, if you are in the
path to forward the patch to the mainline (maintainer's tree), you can
add by yourself the "Signed-off-by" tag before send a "pull" to Linus.
See [1] for more information.

[1] https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin

If you don't have a maintainer's tree, you can give (as a maintainer) an
"Acked-by" tag that then I can add to the patch. More info in [2].

[2] https://www.kernel.org/doc/html/latest/process/submitting-patches.html#when-to-use-acked-by-cc-and-co-developed-by

> Only two minor comments.
>
>
> > ---
> >  drivers/virt/acrn/acrn_drv.h | 10 ++++++----
> >  drivers/virt/acrn/mm.c       |  9 ++++-----
> >  2 files changed, 10 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/virt/acrn/acrn_drv.h b/drivers/virt/acrn/acrn_drv.h
> > index 1be54efa666c..fcc2e3e5232a 100644
> > --- a/drivers/virt/acrn/acrn_drv.h
> > +++ b/drivers/virt/acrn/acrn_drv.h
> > @@ -48,6 +48,7 @@ struct vm_memory_region_op {
> >   * @reserved:		Reserved.
> >   * @regions_num:	The number of vm_memory_region_op.
> >   * @regions_gpa:	Physical address of a vm_memory_region_op array.
> > + * @regions_op:		Flexible array of vm_memory_region_op.
> One Tab please.

Sorry, but if I use only one tab, the parameters description are not all
aligned.

> >   *
> >   * HC_VM_SET_MEMORY_REGIONS uses this structure to manage EPT mappings of
> >   * multiple memory regions of a User VM. A &struct vm_memory_region_batch
> > @@ -55,10 +56,11 @@ struct vm_memory_region_op {
> >   * ACRN Hypervisor.
> >   */
> >  struct vm_memory_region_batch {
> > -	u16	vmid;
> > -	u16	reserved[3];
> > -	u32	regions_num;
> > -	u64	regions_gpa;
> > +	u16				vmid;
> > +	u16				reserved[3];
> > +	u32				regions_num;
> > +	u64				regions_gpa;
> > +	struct vm_memory_region_op	regions_op[];
> Please use Whitespace instead of Tab.

Sorry, but I don't understand. Do you prefer something like?:

diff --git a/drivers/virt/acrn/acrn_drv.h b/drivers/virt/acrn/acrn_drv.h
index fcc2e3e5232a..5663c17ad37c 100644
--- a/drivers/virt/acrn/acrn_drv.h
+++ b/drivers/virt/acrn/acrn_drv.h
@@ -56,11 +56,11 @@ struct vm_memory_region_op {
  * ACRN Hypervisor.
  */
 struct vm_memory_region_batch {
-	u16				vmid;
-	u16				reserved[3];
-	u32				regions_num;
-	u64				regions_gpa;
-	struct vm_memory_region_op	regions_op[];
+	u16			   vmid;
+	u16			   reserved[3];
+	u32			   regions_num;
+	u64			   regions_gpa;
+	struct vm_memory_region_op regions_op[];
 };

 /**

Moreover, for the v2 I will fix the typo "syze->size" in the subject as
suggested Kees ;)

Regards,
Len

  parent reply	other threads:[~2021-10-15 15:53 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-11 10:39 [PATCH] virt: acrn: Prefer array_syze and struct_size over open coded arithmetic Len Baker
2021-10-12  1:34 ` Li Fei1
2021-10-13  7:29   ` Kees Cook
2021-10-15 15:52   ` Len Baker [this message]
2021-10-18  1:07     ` Li Fei1

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211015155248.GA3289@titan \
    --to=len.baker@gmx.com \
    --cc=fei1.li@intel.com \
    --cc=gustavoars@kernel.org \
    --cc=keescook@chromium.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.