diff --git a/iscsi-scst/usr/chap.c b/iscsi-scst/usr/chap.c index 7819bd74f..f0e8a69c2 100644 --- a/iscsi-scst/usr/chap.c +++ b/iscsi-scst/usr/chap.c @@ -494,7 +494,7 @@ static int chap_initiator_auth_create_challenge(struct connection *conn) return CHAP_TARGET_ERROR; p = text; - strcpy(p, "0x"); + memcpy(p, "0x", sizeof("0x")); p += 2; for (i = 0; i < conn->auth.chap.challenge_size; i++) { if (chap_rand(&random) < 0) { diff --git a/iscsi-scst/usr/event.c b/iscsi-scst/usr/event.c index 5808635d8..1068e3284 100644 --- a/iscsi-scst/usr/event.c +++ b/iscsi-scst/usr/event.c @@ -694,6 +694,7 @@ static int handle_target_redirect(struct target *target, char *p) { int res = 0; char *addr, *type, *t, *port; + size_t addr_len; int port_num = ISCSI_LISTEN_PORT; int type_num; union { @@ -738,7 +739,8 @@ static int handle_target_redirect(struct target *target, char *p) } } - if (strlen(addr) >= sizeof(target->redirect.addr)) { + addr_len = strlen(addr); + if (addr_len >= sizeof(target->redirect.addr)) { log_error("Too long addr %s, max allowed %zd", addr, sizeof(target->redirect.addr)-1); res = -ERANGE; @@ -776,7 +778,7 @@ static int handle_target_redirect(struct target *target, char *p) (type_num == ISCSI_STATUS_TGT_MOVED_TEMP) ? "temporarily" : "permanently", addr, port_num); - strcpy(target->redirect.addr, addr); + memcpy(target->redirect.addr, addr, addr_len + 1); target->redirect.port = port_num; target->redirect.type = type_num; diff --git a/iscsi-scst/usr/iscsid.c b/iscsi-scst/usr/iscsid.c index 747509b0b..ef5e74718 100644 --- a/iscsi-scst/usr/iscsid.c +++ b/iscsi-scst/usr/iscsid.c @@ -153,7 +153,7 @@ void text_key_add(struct connection *conn, const char *key, const char *value) switch (stage) { case 0: sz = min_t(int, data_sz - seg->len, keylen - off); - strncpy(seg->data + seg->len, key + off, sz); + memcpy(seg->data + seg->len, key + off, sz); if (sz == data_sz - seg->len) { off += sz; if (keylen - off == 0) { @@ -173,7 +173,7 @@ void text_key_add(struct connection *conn, const char *key, const char *value) break; case 2: sz = min_t(int, data_sz - seg->len, valuelen - off); - strncpy(seg->data + seg->len, value + off, sz); + memcpy(seg->data + seg->len, value + off, sz); off += sz; if (valuelen - off == 0) { off = 0; diff --git a/scst/src/dev_handlers/scst_vdisk_main.c b/scst/src/dev_handlers/scst_vdisk_main.c index 38094c404..e01eb08ed 100644 --- a/scst/src/dev_handlers/scst_vdisk_main.c +++ b/scst/src/dev_handlers/scst_vdisk_main.c @@ -6596,7 +6596,7 @@ static int vdev_create_node(struct scst_dev_type *devt, const char *name, int no res = -EINVAL; goto out_free; } - strcpy(virt_dev->name, name); + strscpy(virt_dev->name, name, sizeof(virt_dev->name)); dev_id_num = vdisk_gen_dev_id_num(virt_dev->name); diff --git a/scst/src/scst_dlm.c b/scst/src/scst_dlm.c index 805397c31..31c95945d 100644 --- a/scst/src/scst_dlm.c +++ b/scst/src/scst_dlm.c @@ -720,6 +720,7 @@ scst_dlm_filldir(struct dir_context *arg, const char *name_arg, char **entries = &ctx->entries; #endif int i; + size_t len; snprintf(name, sizeof(name), "%.*s", name_len, name_arg); if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0 || !*entries) @@ -728,13 +729,14 @@ scst_dlm_filldir(struct dir_context *arg, const char *name_arg, ; i = p - *entries; q = *entries; - *entries = krealloc(q, i + strlen(name) + 2, GFP_KERNEL); + len = strlen(name); + *entries = krealloc(q, i + len + 2, GFP_KERNEL); if (!*entries) { kfree(q); goto out; } - strcpy(*entries + i, name); - i += strlen(name); + memcpy(*entries + i, name, len + 1); + i += len; (*entries)[i + 1] = '\0'; out: diff --git a/usr/events/events.c b/usr/events/events.c index 5ce15a17d..3b7b66fbc 100644 --- a/usr/events/events.c +++ b/usr/events/events.c @@ -142,10 +142,8 @@ int main(int argc, char **argv) exit(1); } } - strncpy(allowed_events[allowed_events_num].issuer_name, - optarg, sizeof(allowed_events[allowed_events_num].issuer_name)); - allowed_events[allowed_events_num].issuer_name[ - sizeof(allowed_events[allowed_events_num].issuer_name)-1] = '\0'; + snprintf(allowed_events[allowed_events_num].issuer_name, + sizeof(allowed_events[allowed_events_num].issuer_name), "%s", optarg); break; case 'n': non_blocking = 1; @@ -198,9 +196,8 @@ int main(int argc, char **argv) allowed_events[i].issuer_name); memset(&e, 0, sizeof(e)); e.event_code = allowed_events[i].event_code; - strncpy(e.issuer_name, allowed_events[i].issuer_name, - sizeof(e.issuer_name)); - e.issuer_name[sizeof(e.issuer_name)-1] = '\0'; + memcpy(e.issuer_name, allowed_events[i].issuer_name, + sizeof(e.issuer_name)); res = ioctl(event_fd, SCST_EVENT_ALLOW_EVENT, &e); if (res != 0) { @@ -311,9 +308,8 @@ again_poll: allowed_events[0].issuer_name); memset(&e, 0, sizeof(e)); e.event_code = allowed_events[0].event_code; - strncpy(e.issuer_name, allowed_events[0].issuer_name, - sizeof(e.issuer_name)); - e.issuer_name[sizeof(e.issuer_name)-1] = '\0'; + memcpy(e.issuer_name, allowed_events[0].issuer_name, + sizeof(e.issuer_name)); res = ioctl(event_fd, SCST_EVENT_DISALLOW_EVENT, &e); if (res != 0) { diff --git a/usr/fileio/fileio.c b/usr/fileio/fileio.c index 053d23104..804d4440a 100644 --- a/usr/fileio/fileio.c +++ b/usr/fileio/fileio.c @@ -381,12 +381,10 @@ static int start(int argc, char **argv) memset(&desc, 0, sizeof(desc)); desc.license_str = (unsigned long)"GPL"; desc.version_str = (unsigned long)DEV_USER_VERSION; - strncpy(desc.name, devs[i].name, sizeof(desc.name)-1); - desc.name[sizeof(desc.name)-1] = '\0'; + snprintf(desc.name, sizeof(desc.name), "%s", devs[i].name); if (sgv_shared) { desc.sgv_shared = 1; - strncpy(desc.sgv_name, devs[0].name, sizeof(desc.sgv_name)-1); - desc.sgv_name[sizeof(desc.sgv_name)-1] = '\0'; + snprintf(desc.sgv_name, sizeof(desc.sgv_name), "%s", devs[0].name); } desc.sgv_single_alloc_pages = sgv_single_alloc_pages; desc.sgv_purge_interval = sgv_purge_interval; diff --git a/usr/stpgd/stpgd_main.c b/usr/stpgd/stpgd_main.c index 2c6916a7a..addd5e5cd 100644 --- a/usr/stpgd/stpgd_main.c +++ b/usr/stpgd/stpgd_main.c @@ -307,9 +307,8 @@ static int stpg_event_loop(void) memset(&e1, 0, sizeof(e1)); e1.event_code = SCST_EVENT_STPG_USER_INVOKE; - strncpy(e1.issuer_name, SCST_EVENT_SCST_CORE_ISSUER, - sizeof(e1.issuer_name)); - e1.issuer_name[sizeof(e1.issuer_name)-1] = '\0'; + memcpy(e1.issuer_name, SCST_EVENT_SCST_CORE_ISSUER, + sizeof(SCST_EVENT_SCST_CORE_ISSUER)); PRINT_INFO("Setting allowed event code %u, issuer_name %s", e1.event_code, e1.issuer_name); @@ -323,9 +322,8 @@ static int stpg_event_loop(void) } e1.event_code = SCST_EVENT_TM_FN_RECEIVED; - strncpy(e1.issuer_name, SCST_EVENT_SCST_CORE_ISSUER, - sizeof(e1.issuer_name)); - e1.issuer_name[sizeof(e1.issuer_name) - 1] = '\0'; + memcpy(e1.issuer_name, SCST_EVENT_SCST_CORE_ISSUER, + sizeof(SCST_EVENT_SCST_CORE_ISSUER)); PRINT_INFO("Setting allowed event code %u, issuer_name %s", e1.event_code, e1.issuer_name);