| From c7a22994c061b7bbb3174af659a874a8b4b93ddb Mon Sep 17 00:00:00 2001 |
| From: Brian Norris <briannorris@chromium.org> |
| Date: Mon, 30 Sep 2019 14:45:22 -0700 |
| Subject: [PATCH] firmware: google: increment VPD key_len properly |
| |
| commit 442f1e746e8187b9deb1590176f6b0ff19686b11 upstream. |
| |
| Commit 4b708b7b1a2c ("firmware: google: check if size is valid when |
| decoding VPD data") adds length checks, but the new vpd_decode_entry() |
| function botched the logic -- it adds the key length twice, instead of |
| adding the key and value lengths separately. |
| |
| On my local system, this means vpd.c's vpd_section_create_attribs() hits |
| an error case after the first attribute it parses, since it's no longer |
| looking at the correct offset. With this patch, I'm back to seeing all |
| the correct attributes in /sys/firmware/vpd/... |
| |
| Fixes: 4b708b7b1a2c ("firmware: google: check if size is valid when decoding VPD data") |
| Cc: <stable@vger.kernel.org> |
| Cc: Hung-Te Lin <hungte@chromium.org> |
| Signed-off-by: Brian Norris <briannorris@chromium.org> |
| Reviewed-by: Stephen Boyd <swboyd@chromium.org> |
| Reviewed-by: Guenter Roeck <groeck@chromium.org> |
| Link: https://lore.kernel.org/r/20190930214522.240680-1-briannorris@chromium.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/firmware/google/vpd_decode.c b/drivers/firmware/google/vpd_decode.c |
| index 584d0d56491f..e55d44c737cf 100644 |
| --- a/drivers/firmware/google/vpd_decode.c |
| +++ b/drivers/firmware/google/vpd_decode.c |
| @@ -54,7 +54,7 @@ static int vpd_decode_entry(const u32 max_len, const u8 *input_buf, |
| if (max_len - consumed < *entry_len) |
| return VPD_FAIL; |
| |
| - consumed += decoded_len; |
| + consumed += *entry_len; |
| *_consumed = consumed; |
| return VPD_OK; |
| } |
| -- |
| 2.7.4 |
| |