2017-07-31 04:27:01

by Joshua Kinard

[permalink] [raw]
Subject: [PATCH] Replace bcopy() calls with equivalent memmove() calls

As annotated in the bcopy(3) man page, bcopy() was marked as LEGACY in
POSIX.1-2001 and removed in POSIX.1-2008, and should be replaced with
either memcpy() or memmove() calls to copy bytes from one memory region to
another. The attached patch replaces all bcopy() calls in libtirpc with
equivalent memmove() calls.

Signed-off-by: Joshua Kinard <[email protected]>
---

src/auth_time.c | 2 +-
src/crypt_client.c | 8 ++++----
src/svc_auth_des.c | 2 +-
3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/auth_time.c b/src/auth_time.c
index 210d251..5426902 100644
--- a/src/auth_time.c
+++ b/src/auth_time.c
@@ -104,7 +104,7 @@ static int uaddr_to_sockaddr(uaddr, sin)
p_bytes[1] = (unsigned char)a[5] & 0x000000FF;

sin->sin_family = AF_INET; /* always */
- bcopy((char *)&p_bytes, (char *)&sin->sin_port, 2);
+ memmove((char *)&sin->sin_port, (char *)&p_bytes, 2);

return (0);
}
diff --git a/src/crypt_client.c b/src/crypt_client.c
index f393926..b8c5767 100644
--- a/src/crypt_client.c
+++ b/src/crypt_client.c
@@ -75,8 +75,8 @@ _des_crypt_call(buf, len, dparms)
des_crypt_1_arg.desbuf.desbuf_val = buf;
des_crypt_1_arg.des_dir = dparms->des_dir;
des_crypt_1_arg.des_mode = dparms->des_mode;
- bcopy(dparms->des_ivec, des_crypt_1_arg.des_ivec, 8);
- bcopy(dparms->des_key, des_crypt_1_arg.des_key, 8);
+ memmove(des_crypt_1_arg.des_ivec, dparms->des_ivec, 8);
+ memmove(des_crypt_1_arg.des_key, dparms->des_key, 8);

result_1 = des_crypt_1(&des_crypt_1_arg, clnt);
if (result_1 == (desresp *) NULL) {
@@ -88,8 +88,8 @@ _des_crypt_call(buf, len, dparms)

if (result_1->stat == DESERR_NONE ||
result_1->stat == DESERR_NOHWDEVICE) {
- bcopy(result_1->desbuf.desbuf_val, buf, len);
- bcopy(result_1->des_ivec, dparms->des_ivec, 8);
+ memmove(buf, result_1->desbuf.desbuf_val, len);
+ memmove(dparms->des_ivec, result_1->des_ivec, 8);
}

clnt_freeres(clnt, (xdrproc_t)xdr_desresp, result_1);
diff --git a/src/svc_auth_des.c b/src/svc_auth_des.c
index 64a7682..5813c5a 100644
--- a/src/svc_auth_des.c
+++ b/src/svc_auth_des.c
@@ -145,7 +145,7 @@ _svcauth_des(rqst, msg)
return (AUTH_BADCRED);
}
cred->adc_fullname.name = area->area_netname;
- bcopy((char *)ixdr, cred->adc_fullname.name,
+ memmove(cred->adc_fullname.name, (char *)ixdr,
(u_int)namelen);
cred->adc_fullname.name[namelen] = 0;
ixdr += (RNDUP(namelen) / BYTES_PER_XDR_UNIT);



2017-07-31 14:47:36

by Chuck Lever

[permalink] [raw]
Subject: Re: [Libtirpc-devel] [PATCH] Replace bcopy() calls with equivalent memmove() calls


> On Jul 31, 2017, at 12:26 AM, Joshua Kinard <[email protected]> wrote:
>
> As annotated in the bcopy(3) man page, bcopy() was marked as LEGACY in
> POSIX.1-2001 and removed in POSIX.1-2008, and should be replaced with
> either memcpy() or memmove() calls to copy bytes from one memory region to
> another. The attached patch replaces all bcopy() calls in libtirpc with
> equivalent memmove() calls.

As far as I can tell these are all deprecated code paths.
memmove(3) should be safe in all cases, but there's no way
to test the change.

Reviewed-by: Chuck Lever <[email protected]>


> Signed-off-by: Joshua Kinard <[email protected]>
> ---
>
> src/auth_time.c | 2 +-
> src/crypt_client.c | 8 ++++----
> src/svc_auth_des.c | 2 +-
> 3 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/src/auth_time.c b/src/auth_time.c
> index 210d251..5426902 100644
> --- a/src/auth_time.c
> +++ b/src/auth_time.c
> @@ -104,7 +104,7 @@ static int uaddr_to_sockaddr(uaddr, sin)
> p_bytes[1] = (unsigned char)a[5] & 0x000000FF;
>
> sin->sin_family = AF_INET; /* always */
> - bcopy((char *)&p_bytes, (char *)&sin->sin_port, 2);
> + memmove((char *)&sin->sin_port, (char *)&p_bytes, 2);
>
> return (0);
> }
> diff --git a/src/crypt_client.c b/src/crypt_client.c
> index f393926..b8c5767 100644
> --- a/src/crypt_client.c
> +++ b/src/crypt_client.c
> @@ -75,8 +75,8 @@ _des_crypt_call(buf, len, dparms)
> des_crypt_1_arg.desbuf.desbuf_val = buf;
> des_crypt_1_arg.des_dir = dparms->des_dir;
> des_crypt_1_arg.des_mode = dparms->des_mode;
> - bcopy(dparms->des_ivec, des_crypt_1_arg.des_ivec, 8);
> - bcopy(dparms->des_key, des_crypt_1_arg.des_key, 8);
> + memmove(des_crypt_1_arg.des_ivec, dparms->des_ivec, 8);
> + memmove(des_crypt_1_arg.des_key, dparms->des_key, 8);
>
> result_1 = des_crypt_1(&des_crypt_1_arg, clnt);
> if (result_1 == (desresp *) NULL) {
> @@ -88,8 +88,8 @@ _des_crypt_call(buf, len, dparms)
>
> if (result_1->stat == DESERR_NONE ||
> result_1->stat == DESERR_NOHWDEVICE) {
> - bcopy(result_1->desbuf.desbuf_val, buf, len);
> - bcopy(result_1->des_ivec, dparms->des_ivec, 8);
> + memmove(buf, result_1->desbuf.desbuf_val, len);
> + memmove(dparms->des_ivec, result_1->des_ivec, 8);
> }
>
> clnt_freeres(clnt, (xdrproc_t)xdr_desresp, result_1);
> diff --git a/src/svc_auth_des.c b/src/svc_auth_des.c
> index 64a7682..5813c5a 100644
> --- a/src/svc_auth_des.c
> +++ b/src/svc_auth_des.c
> @@ -145,7 +145,7 @@ _svcauth_des(rqst, msg)
> return (AUTH_BADCRED);
> }
> cred->adc_fullname.name = area->area_netname;
> - bcopy((char *)ixdr, cred->adc_fullname.name,
> + memmove(cred->adc_fullname.name, (char *)ixdr,
> (u_int)namelen);
> cred->adc_fullname.name[namelen] = 0;
> ixdr += (RNDUP(namelen) / BYTES_PER_XDR_UNIT);
>

--
Chuck Lever
[email protected]