From a503ba8ba4ada34df4f479b20f4487f70f335cd3 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Fri, 30 Aug 2013 23:03:03 +1000 Subject: [PATCH] Use reentrant strtok in tolines() function in bflsc to avoid racing on contextless calls. --- driver-bflsc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/driver-bflsc.c b/driver-bflsc.c index f488972c..6ee715e7 100644 --- a/driver-bflsc.c +++ b/driver-bflsc.c @@ -84,8 +84,8 @@ static void bflsc_applog(struct cgpu_info *bflsc, int dev, enum usb_cmds cmd, in // error would be no data or missing LF at the end static bool tolines(struct cgpu_info *bflsc, int dev, char *buf, int *lines, char ***items, enum usb_cmds cmd) { + char *tok, *saveptr; bool ok = false; - char *tok; #define p_lines (*lines) #define p_items (*items) @@ -99,7 +99,7 @@ static bool tolines(struct cgpu_info *bflsc, int dev, char *buf, int *lines, cha return ok; } - tok = strtok(buf, "\n"); + tok = strtok_r(buf, "\n", &saveptr); if (!tok) { applog(LOG_DEBUG, "USB: %s%i: (%d) missing lf(s) in %s", bflsc->drv->name, bflsc->device_id, dev, usb_cmdname(cmd)); @@ -112,7 +112,7 @@ static bool tolines(struct cgpu_info *bflsc, int dev, char *buf, int *lines, cha if (unlikely(!p_items)) quit(1, "Failed to realloc p_items in tolines"); p_items[p_lines-1] = strdup(tok); - tok = strtok(NULL, "\n"); + tok = strtok_r(NULL, "\n", &saveptr); } return ok;