Message ID | 20241002-packing-kunit-tests-and-split-pack-unpack-v2-1-8373e551eae3@intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 8b3e26677bc64d42d2f38d9abc8dccc09d8a4259 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | packing: various improvements and KUnit tests | expand |
On Wed, Oct 02, 2024 at 02:51:50PM -0700, Jacob Keller wrote: > From: Vladimir Oltean <vladimir.oltean@nxp.com> > > While reworking the implementation, it became apparent that this check > does not exist. > > There is no functional issue yet, because at call sites, "startbit" and > "endbit" are always hardcoded to correct values, and never come from the > user. > > Even with the upcoming support of arbitrary buffer lengths, the > "startbit >= 8 * pbuflen" check will remain correct. This is because > we intend to always interpret the packed buffer in a way that avoids > discontinuities in the available bit indices. > > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> > Tested-by: Jacob Keller <jacob.e.keller@intel.com> > Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> > --- Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
diff --git a/lib/packing.c b/lib/packing.c index 3f656167c17e..439125286d2b 100644 --- a/lib/packing.c +++ b/lib/packing.c @@ -86,8 +86,10 @@ int packing(void *pbuf, u64 *uval, int startbit, int endbit, size_t pbuflen, */ int plogical_first_u8, plogical_last_u8, box; - /* startbit is expected to be larger than endbit */ - if (startbit < endbit) + /* startbit is expected to be larger than endbit, and both are + * expected to be within the logically addressable range of the buffer. + */ + if (unlikely(startbit < endbit || startbit >= 8 * pbuflen || endbit < 0)) /* Invalid function call */ return -EINVAL;