diff --git a/module/sock/posix/posix.c b/module/sock/posix/posix.c index 9287a7105..1147d96da 100644 --- a/module/sock/posix/posix.c +++ b/module/sock/posix/posix.c @@ -130,6 +130,8 @@ posix_sock_impl_get_opts(struct spdk_sock_impl_opts *opts, size_t *len) errno = EINVAL; return -1; } + + assert(sizeof(*opts) >= *len); memset(opts, 0, *len); posix_sock_copy_impl_opts(opts, &g_spdk_posix_sock_impl_opts, *len); @@ -146,6 +148,7 @@ posix_sock_impl_set_opts(const struct spdk_sock_impl_opts *opts, size_t len) return -1; } + assert(sizeof(*opts) >= len); posix_sock_copy_impl_opts(&g_spdk_posix_sock_impl_opts, opts, len); return 0; @@ -158,6 +161,7 @@ posix_opts_get_impl_opts(const struct spdk_sock_opts *opts, struct spdk_sock_imp memcpy(dest, &g_spdk_posix_sock_impl_opts, sizeof(*dest)); if (opts->impl_opts != NULL) { + assert(sizeof(*dest) >= opts->impl_opts_size); posix_sock_copy_impl_opts(dest, opts->impl_opts, opts->impl_opts_size); } } diff --git a/module/sock/uring/uring.c b/module/sock/uring/uring.c index 6b6b267fd..139c7c8c0 100644 --- a/module/sock/uring/uring.c +++ b/module/sock/uring/uring.c @@ -150,6 +150,8 @@ uring_sock_impl_get_opts(struct spdk_sock_impl_opts *opts, size_t *len) errno = EINVAL; return -1; } + + assert(sizeof(*opts) >= *len); memset(opts, 0, *len); uring_sock_copy_impl_opts(opts, &g_spdk_uring_sock_impl_opts, *len); @@ -166,6 +168,7 @@ uring_sock_impl_set_opts(const struct spdk_sock_impl_opts *opts, size_t len) return -1; } + assert(sizeof(*opts) >= len); uring_sock_copy_impl_opts(&g_spdk_uring_sock_impl_opts, opts, len); return 0; @@ -178,6 +181,7 @@ uring_opts_get_impl_opts(const struct spdk_sock_opts *opts, struct spdk_sock_imp memcpy(dest, &g_spdk_uring_sock_impl_opts, sizeof(*dest)); if (opts->impl_opts != NULL) { + assert(sizeof(*dest) >= opts->impl_opts_size); uring_sock_copy_impl_opts(dest, opts->impl_opts, opts->impl_opts_size); } } diff --git a/test/unit/lib/sock/sock.c/sock_ut.c b/test/unit/lib/sock/sock.c/sock_ut.c index fc32b39ab..952725724 100644 --- a/test/unit/lib/sock/sock.c/sock_ut.c +++ b/test/unit/lib/sock/sock.c/sock_ut.c @@ -911,7 +911,6 @@ posix_sock_impl_get_set_opts(void) int rc; size_t len = 0; struct spdk_sock_impl_opts opts = {}; - struct spdk_sock_impl_opts long_opts[2]; rc = spdk_sock_impl_get_opts("posix", NULL, &len); CU_ASSERT(rc == -1); @@ -928,12 +927,6 @@ posix_sock_impl_get_set_opts(void) CU_ASSERT(opts.recv_buf_size == MIN_SO_RCVBUF_SIZE); CU_ASSERT(opts.send_buf_size == MIN_SO_SNDBUF_SIZE); - /* Try to request more opts */ - len = sizeof(long_opts); - rc = spdk_sock_impl_get_opts("posix", long_opts, &len); - CU_ASSERT(rc == 0); - CU_ASSERT(len == sizeof(opts)); - /* Try to request zero opts */ len = 0; rc = spdk_sock_impl_get_opts("posix", &opts, &len); @@ -955,14 +948,6 @@ posix_sock_impl_get_set_opts(void) CU_ASSERT(opts.recv_buf_size == 16); CU_ASSERT(opts.send_buf_size == 4); - /* Try to set more opts */ - long_opts[0].recv_buf_size = 4; - long_opts[0].send_buf_size = 6; - long_opts[1].recv_buf_size = 0; - long_opts[1].send_buf_size = 0; - rc = spdk_sock_impl_set_opts("posix", long_opts, sizeof(long_opts)); - CU_ASSERT(rc == 0); - /* Try to set less opts. Opts in the end should be untouched */ opts.recv_buf_size = 5; opts.send_buf_size = 10; @@ -973,7 +958,7 @@ posix_sock_impl_get_set_opts(void) rc = spdk_sock_impl_get_opts("posix", &opts, &len); CU_ASSERT(rc == 0); CU_ASSERT(opts.recv_buf_size == 5); - CU_ASSERT(opts.send_buf_size == 6); + CU_ASSERT(opts.send_buf_size == 4); /* Try to set partial option. It should not be changed */ opts.recv_buf_size = 1000;