From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============7265330158936785345==" MIME-Version: 1.0 From: Ramesh Thomas Subject: [Accel-config] [PATCH] accel-config: Fix a read buffer length bug Date: Wed, 02 Feb 2022 17:43:07 -0800 Message-ID: <20220203014307.100314-1-ramesh.thomas@intel.com> To: accel-config@lists.01.org List-ID: --===============7265330158936785345== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Generic function used to read a string attribute was using a buffer of max length 64. Attributes like op_cap exceeds that size. Change read buffer length to 4k. Also removed a redundant memory allocation. Signed-off-by: Ramesh Thomas --- accfg/lib/libaccfg.c | 24 +++++++----------------- accfg/libaccel_config.h | 2 +- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/accfg/lib/libaccfg.c b/accfg/lib/libaccfg.c index 9cdd8f8..e6c6055 100644 --- a/accfg/lib/libaccfg.c +++ b/accfg/lib/libaccfg.c @@ -197,7 +197,7 @@ static int accfg_set_param(struct accfg_ctx *ctx, int d= fd, char *name, static long accfg_get_param_long(struct accfg_ctx *ctx, int dfd, char *nam= e) { int fd =3D openat(dfd, name, O_RDONLY); - char buf[MAX_PARAM_LEN + 1]; + char buf[MAX_PARAM_LEN]; int n; const char *p; = @@ -210,7 +210,7 @@ static long accfg_get_param_long(struct accfg_ctx *ctx,= int dfd, char *name) if (fd =3D=3D -1) return -errno; = - n =3D read(fd, buf, MAX_PARAM_LEN); + n =3D read(fd, buf, MAX_PARAM_LEN - 1); close(fd); if (n <=3D 0) return -ENXIO; @@ -226,13 +226,13 @@ static uint64_t accfg_get_param_unsigned_llong( struct accfg_ctx *ctx, int dfd, char *name) { int fd =3D openat(dfd, name, O_RDONLY); - char buf[MAX_PARAM_LEN + 1]; + char buf[MAX_PARAM_LEN]; int n; = if (fd =3D=3D -1) return -errno; = - n =3D read(fd, buf, MAX_PARAM_LEN); + n =3D read(fd, buf, MAX_PARAM_LEN - 1); close(fd); if (n <=3D 0) return -ENXIO; @@ -247,13 +247,13 @@ static uint64_t accfg_get_param_unsigned_llong( static char *accfg_get_param_str(struct accfg_ctx *ctx, int dfd, char *nam= e) { int fd =3D openat(dfd, name, O_RDONLY); - char buf[MAX_PARAM_LEN + 1]; + char buf[MAX_PARAM_LEN]; int n; = if (fd =3D=3D -1) return NULL; = - n =3D read(fd, buf, MAX_PARAM_LEN); + n =3D read(fd, buf, MAX_PARAM_LEN - 1); close(fd); if (n <=3D 0) return NULL; @@ -618,21 +618,13 @@ static void *add_device(void *parent, int id, const c= har *ctl_base, { struct accfg_ctx *ctx =3D parent; struct accfg_device *device; - char *path; int dfd; int rc; char *p; = - path =3D calloc(1, strlen(ctl_base) + MAX_PARAM_LEN); - if (!path) { - err(ctx, "%s: allocation of path failed\n", __func__); - return NULL; - } - dfd =3D open(ctl_base, O_PATH); if (dfd =3D=3D -1) { err(ctx, "%s open failed: %s\n", __func__, strerror(errno)); - free(path); return NULL; } = @@ -702,7 +694,7 @@ static void *add_device(void *parent, int id, const cha= r *ctl_base, device->mdev_path =3D p; = device->device_buf =3D calloc(1, strlen(device->device_path) + - MAX_PARAM_LEN); + MAX_BUF_LEN); if (!device->device_buf) { err(ctx, "allocation of device buffer failed\n"); goto err_read; @@ -720,7 +712,6 @@ static void *add_device(void *parent, int id, const cha= r *ctl_base, goto err_dev_path; = list_add_tail(&ctx->devices, &device->list); - free(path); = return device; = @@ -730,7 +721,6 @@ err_read: free(device->mdev_path); free(device); err_device: - free(path); return NULL; } = diff --git a/accfg/libaccel_config.h b/accfg/libaccel_config.h index 8e7a74e..9e952a7 100644 --- a/accfg/libaccel_config.h +++ b/accfg/libaccel_config.h @@ -22,7 +22,7 @@ extern "C" { = #define MAX_DEV_LEN 64 #define MAX_BUF_LEN 128 -#define MAX_PARAM_LEN 64 +#define MAX_PARAM_LEN 4096 #define TRAFFIC_CLASS_LIMIT 8 #define WQ_PRIORITY_LIMIT 15 #define UUID_ZERO "00000000-0000-0000-0000-000000000000" -- = 2.34.1 --===============7265330158936785345==--