[v2] eal/windows: fix out-of-memory check
Checks
Commit Message
Check vsnprintf() result to prevent calling malloc() with negative size.
Check actual malloc() result and terminate asprintf() with documented
error code to prevent the use of NULL pointer.
Fixes: e8428a9d8 ("eal/windows: add some basic functions and macros")
Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
---
lib/librte_eal/windows/eal/include/rte_os.h | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
v2 Changes:
Check vsnprintf() value before appending place for '\0'.
Comments
On 2/17/2020 3:56 PM, Dmitry Kozlyuk wrote:
> Check vsnprintf() result to prevent calling malloc() with negative size.
> Check actual malloc() result and terminate asprintf() with documented
> error code to prevent the use of NULL pointer.
>
> Fixes: e8428a9d8 ("eal/windows: add some basic functions and macros")
>
> Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
> ---
> lib/librte_eal/windows/eal/include/rte_os.h | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> v2 Changes:
> Check vsnprintf() value before appending place for '\0'.
>
Acked-by: Ranjit Menon <ranjit.menon@intel.com>
18/02/2020 22:52, Ranjit Menon:
> On 2/17/2020 3:56 PM, Dmitry Kozlyuk wrote:
> > Check vsnprintf() result to prevent calling malloc() with negative size.
> > Check actual malloc() result and terminate asprintf() with documented
> > error code to prevent the use of NULL pointer.
> >
> > Fixes: e8428a9d8 ("eal/windows: add some basic functions and macros")
> >
> > Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
> > ---
> > lib/librte_eal/windows/eal/include/rte_os.h | 9 ++++++---
> > 1 file changed, 6 insertions(+), 3 deletions(-)
> >
> > v2 Changes:
> > Check vsnprintf() value before appending place for '\0'.
> >
> Acked-by: Ranjit Menon <ranjit.menon@intel.com>
Applied, thanks.
Note: adding "in asprintf" to the title in order to give context.
@@ -64,12 +64,15 @@ asprintf(char **buffer, const char *format, ...)
va_list arg;
va_start(arg, format);
- size = vsnprintf(NULL, 0, format, arg) + 1;
+ size = vsnprintf(NULL, 0, format, arg);
va_end(arg);
+ if (size < 0)
+ return -1;
+ size++;
*buffer = malloc(size);
- if (buffer == NULL)
- printf("Cannot allocate memory");
+ if (*buffer == NULL)
+ return -1;
va_start(arg, format);
ret = vsnprintf(*buffer, size, format, arg);