2012-05-09 09:21:15

by Ganir, Chen

[permalink] [raw]
Subject: [PATCH] eir: Keep parsed eir_data on error

From: Chen Ganir <[email protected]>

Do not discard already parsed eir_data on eir data length error.
Data corruption may occur, but this does not mean that we need
to ignore already parsed valid eir data
---
src/eir.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/eir.c b/src/eir.c
index 310cd53..f2f6992 100644
--- a/src/eir.c
+++ b/src/eir.c
@@ -114,10 +114,9 @@ int eir_parse(struct eir_data *eir, uint8_t *eir_data, uint8_t eir_len)

len += field_len + 1;

- /* Bail out if got incorrect length */
+ /* Do not continue EIR Data parsing if got incorrect length */
if (len > eir_len) {
- eir_data_free(eir);
- return -EINVAL;
+ return 0;
}

data_len = field_len - 1;
--
1.7.0.4



2012-05-15 07:58:10

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH] eir: Keep parsed eir_data on error

Hi Chen,

On Wed, May 09, 2012, [email protected] wrote:
> Do not discard already parsed eir_data on eir data length error.
> Data corruption may occur, but this does not mean that we need
> to ignore already parsed valid eir data
> ---
> src/eir.c | 5 ++---
> 1 files changed, 2 insertions(+), 3 deletions(-)

Applied, though I did clean it up a little bit (e.g. removing {} and
doing a break instead of a return).

Johan

2012-05-15 05:46:50

by Ganir, Chen

[permalink] [raw]
Subject: RE: [PATCH] eir: Keep parsed eir_data on error

> -----Original Message-----
> From: Ganir, Chen
> Sent: Wednesday, May 09, 2012 12:21 PM
> To: [email protected]
> Cc: Ganir, Chen
> Subject: [PATCH] eir: Keep parsed eir_data on error
>
> From: Chen Ganir <[email protected]>
>
> Do not discard already parsed eir_data on eir data length error.
> Data corruption may occur, but this does not mean that we need
> to ignore already parsed valid eir data
> ---
> src/eir.c | 5 ++---
> 1 files changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/src/eir.c b/src/eir.c
> index 310cd53..f2f6992 100644
> --- a/src/eir.c
> +++ b/src/eir.c
> @@ -114,10 +114,9 @@ int eir_parse(struct eir_data *eir, uint8_t
> *eir_data, uint8_t eir_len)
>
> len += field_len + 1;
>
> - /* Bail out if got incorrect length */
> + /* Do not continue EIR Data parsing if got incorrect length
> */
> if (len > eir_len) {
> - eir_data_free(eir);
> - return -EINVAL;
> + return 0;
> }
>
> data_len = field_len - 1;
> --
> 1.7.0.4

Ping ?

BR,
Chen Ganir.