[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 01/16] cutils: tighten qemu_parse_fd()
From: |
Laszlo Ersek |
Subject: |
[Qemu-devel] [PATCH 01/16] cutils: tighten qemu_parse_fd() |
Date: |
Thu, 10 Apr 2014 10:24:30 +0200 |
qemu_parse_fd() used to handle at least the following strings incorrectly:
o "-2": simply let through
o "2147483648": returned as LONG_MAX==INT_MAX on ILP32 (with ERANGE
ignored); implementation-defined behavior on LP64
Signed-off-by: Laszlo Ersek <address@hidden>
---
util/cutils.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/util/cutils.c b/util/cutils.c
index b337293..dbe7412 100644
--- a/util/cutils.c
+++ b/util/cutils.c
@@ -22,10 +22,12 @@
* THE SOFTWARE.
*/
#include "qemu-common.h"
#include "qemu/host-utils.h"
#include <math.h>
+#include <limits.h>
+#include <errno.h>
#include "qemu/sockets.h"
#include "qemu/iov.h"
#include "net/net.h"
@@ -455,15 +457,20 @@ int parse_uint_full(const char *s, unsigned long long
*value, int base)
return 0;
}
int qemu_parse_fd(const char *param)
{
- int fd;
- char *endptr = NULL;
+ long fd;
+ char *endptr;
+ errno = 0;
fd = strtol(param, &endptr, 10);
- if (*endptr || (fd == 0 && param == endptr)) {
+ if (param == endptr /* no conversion performed */ ||
+ errno != 0 /* not representable as long; possibly others */ ||
+ *endptr != '\0' /* final string not empty */ ||
+ fd < 0 /* invalid as file descriptor */ ||
+ fd > INT_MAX /* not representable as int */) {
return -1;
}
return fd;
}
--
1.8.3.1
- [Qemu-devel] [PATCH 00/16] PCI device assignment: improve error reporting over QMP, Laszlo Ersek, 2014/04/10
- [Qemu-devel] [PATCH 01/16] cutils: tighten qemu_parse_fd(),
Laszlo Ersek <=
- [Qemu-devel] [PATCH 03/16] pci-assign: accept Error from monitor_handle_fd_param2(), Laszlo Ersek, 2014/04/10
- [Qemu-devel] [PATCH 02/16] monitor: add Error-propagating monitor_handle_fd_param2(), Laszlo Ersek, 2014/04/10
- [Qemu-devel] [PATCH 08/16] pci-assign: accept Error from pci_add_capability2(), Laszlo Ersek, 2014/04/10
- [Qemu-devel] [PATCH 04/16] pci-assign: make assign_failed_examine() just format the cause, Laszlo Ersek, 2014/04/10
- [Qemu-devel] [PATCH 06/16] pci-assign: propagate Error from check_irqchip_in_kernel(), Laszlo Ersek, 2014/04/10