From: Kees Cook <keescook@chromium.org>
To: Keith Packard <keithp@keithp.com>
Cc: "Darrick J . Wong" <djwong@kernel.org>,
"Gustavo A. R. Silva" <gustavoars@kernel.org>,
Francis Laniel <laniel_francis@privacyrequired.com>,
Daniel Axtens <dja@axtens.net>,
Dan Williams <dan.j.williams@intel.com>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Guenter Roeck <linux@roeck-us.net>,
Daniel Vetter <daniel.vetter@ffwll.ch>,
Tadeusz Struk <tadeusz.struk@linaro.org>,
Zorro Lang <zlang@redhat.com>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Andy Shevchenko <andriy.shevchenko@intel.com>,
Paolo Abeni <pabeni@redhat.com>,
linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org,
linux-hardening@vger.kernel.org
Subject: Re: [PATCH v2 1/2] Introduce flexible array struct helpers
Date: Wed, 26 Oct 2022 13:33:47 -0700 [thread overview]
Message-ID: <202210260904.41D0BE00A@keescook> (raw)
In-Reply-To: <87k04pf4tk.fsf@keithp.com>
On Mon, Oct 24, 2022 at 11:35:03AM -0700, Keith Packard wrote:
> Kees Cook <keescook@chromium.org> writes:
>
> > + * struct flex_array_struct_example {
> > + * ... // arbitrary members
> > + * bounded_flex_array(
> > + * u16, part_count, // count of elements stored in "parts" below.
> > + * u32, parts // flexible array with elements of type u32.
> > + * );
> > + * );
>
> > + * struct flex_array_struct_example {
> > + * ... // position-sensitive members
> > + * // count of elements stored in "parts" below.
> > + * DECLARE_FAS_COUNT(u16, part_count);
> > + * .. // position-sensitive members
> > + * // flexible array with elements of type u32.
> > + * DECLARE_FAS_ARRAY(u32, parts);
> > + * };
>
> I'm sure there's a good reason, but these two macros appear to be doing
> similar things and yet have very different naming conventions. Maybe:
>
> FAS_DECLARE_COUNT(type, name)
> FAS_DECLARE_ARRAY(type, name)
> FAS_DECLARE(size_type, size_name, array_type, array_name)
Well, the custom has been for individual things, call it "DECLARE_*",
and for groups, we went with lower-case macros (e.g. struct_group()).
>
> > +/* For use with flexible array structure helpers, in <linux/flex_array.h> */
> > +#define __DECLARE_FAS_COUNT(TYPE, NAME) \
> > + union { \
> > + TYPE __flex_array_elements_count; \
> > + TYPE NAME; \
> > + }
>
> How often could that second "public" member be 'const'? That would catch
> places which accidentally assign to this field.
>
> For code which does want to write to this field, is it mostly trimming
> data from the end, or does it actually smash in arbitrary values? For
> the former case, would it be helpful to have a test to make sure the
> assigned size isn't larger than the real size (yeah, that would probably
> take an extra field holding the real size), or larger than the current size?
I don't think this'll work within arbitrary struct declarations, but it
would be nice. :)
--
Kees Cook
next prev parent reply other threads:[~2022-10-26 20:33 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-24 17:20 [PATCH v2 0/2] Introduce flexible array struct helpers Kees Cook
2022-10-24 17:20 ` [PATCH v2 1/2] " Kees Cook
2022-10-24 18:35 ` Keith Packard
2022-10-26 20:33 ` Kees Cook [this message]
2022-10-25 6:12 ` kernel test robot
2022-10-25 8:57 ` Andy Shevchenko
2022-10-24 17:20 ` [PATCH 2/2] xfs: Use flex_cpy() to check extent copying Kees Cook
2022-10-25 8:58 ` Andy Shevchenko
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=202210260904.41D0BE00A@keescook \
--to=keescook@chromium.org \
--cc=andriy.shevchenko@intel.com \
--cc=dan.j.williams@intel.com \
--cc=daniel.vetter@ffwll.ch \
--cc=dja@axtens.net \
--cc=djwong@kernel.org \
--cc=geert@linux-m68k.org \
--cc=gustavoars@kernel.org \
--cc=keithp@keithp.com \
--cc=laniel_francis@privacyrequired.com \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=pabeni@redhat.com \
--cc=tadeusz.struk@linaro.org \
--cc=vincenzo.frascino@arm.com \
--cc=zlang@redhat.com \
/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.