svn commit: r335098 - projects/pnfs-planb-server/usr.bin/pnfsdscopymr

Rick Macklem rmacklem at FreeBSD.org
Thu Jun 14 00:03:46 UTC 2018


Author: rmacklem
Date: Thu Jun 14 00:03:44 2018
New Revision: 335098
URL: https://svnweb.freebsd.org/changeset/base/335098

Log:
  Fix some things in preparation for a merge into head.
  
  Get rid of SPDX-License-Identifier for now.
  Use a second ssize_t variable to avoid a "signed vs unsigned" warning for
  powerpc.
  Copy ai_addr into a struct sockaddr_in, since mips warns that the alignment
  requirements for "struct sockaddr" is different than "struct sockaddr_in".

Modified:
  projects/pnfs-planb-server/usr.bin/pnfsdscopymr/pnfsdscopymr.c

Modified: projects/pnfs-planb-server/usr.bin/pnfsdscopymr/pnfsdscopymr.c
==============================================================================
--- projects/pnfs-planb-server/usr.bin/pnfsdscopymr/pnfsdscopymr.c	Wed Jun 13 23:58:36 2018	(r335097)
+++ projects/pnfs-planb-server/usr.bin/pnfsdscopymr/pnfsdscopymr.c	Thu Jun 14 00:03:44 2018	(r335098)
@@ -1,6 +1,4 @@
 /*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
  * Copyright (c) 2017 Rick Macklem
  *
  * Redistribution and use in source and binary forms, with or without
@@ -74,9 +72,9 @@ main(int argc, char *argv[])
 	struct stat sb;
 	struct statfs sf;
 	struct addrinfo hints, *res, *nres;
-	struct sockaddr_in *sin;
-	struct sockaddr_in6 *sin6;
-	ssize_t xattrsize;
+	struct sockaddr_in sin;
+	struct sockaddr_in6 sin6;
+	ssize_t xattrsize, xattrsize2;
 	size_t mirlen;
 	int ch, fnd, fndzero, i, migrateit, mirrorcnt, mirrorit, ret;
 	int mirrorlevel;
@@ -134,7 +132,8 @@ main(int argc, char *argv[])
 	xattrsize = extattr_get_file(*argv, EXTATTR_NAMESPACE_SYSTEM,
 	    "pnfsd.dsfile", dsfile, sizeof(dsfile));
 	mirrorcnt = xattrsize / sizeof(struct pnfsdsfile);
-	if (mirrorcnt < 1 || xattrsize != mirrorcnt * sizeof(struct pnfsdsfile))
+	xattrsize2 = mirrorcnt * sizeof(struct pnfsdsfile);
+	if (mirrorcnt < 1 || xattrsize != xattrsize2)
 		errx(1, "Can't get extattr pnfsd.dsfile for %s", *argv);
 
 	/* See if there is a 0.0.0.0 entry. */
@@ -195,16 +194,19 @@ main(int argc, char *argv[])
 					 * DS, just exit(0), since copying isn't
 					 * required.
 					 */
-					if (nres->ai_family == AF_INET) {
-						sin = (struct sockaddr_in *)
-						    nres->ai_addr;
-						if (sin->sin_addr.s_addr ==
+					if (nres->ai_family == AF_INET &&
+					    nres->ai_addrlen >= sizeof(sin)) {
+						memcpy(&sin, nres->ai_addr,
+						    sizeof(sin));
+						if (sin.sin_addr.s_addr ==
 						    dsfile[i].dsf_sin.sin_addr.s_addr)
 							exit(0);
-					} else if (nres->ai_family == AF_INET6) {
-						sin6 = (struct sockaddr_in6 *)
-						    nres->ai_addr;
-						if (IN6_ARE_ADDR_EQUAL(&sin6->sin6_addr,
+					} else if (nres->ai_family ==
+					    AF_INET6 && nres->ai_addrlen >=
+					    sizeof(sin6)) {
+						memcpy(&sin6, nres->ai_addr,
+						    sizeof(sin));
+						if (IN6_ARE_ADDR_EQUAL(&sin6.sin6_addr,
 						    &dsfile[i].dsf_sin6.sin6_addr))
 							exit(0);
 					}
@@ -253,18 +255,21 @@ main(int argc, char *argv[])
 					/*
 					 * Note if the entry is found.
 					 */
-					if (nres->ai_family == AF_INET) {
-						sin = (struct sockaddr_in *)
-						    nres->ai_addr;
-						if (sin->sin_addr.s_addr ==
+					if (nres->ai_family == AF_INET &&
+					    nres->ai_addrlen >= sizeof(sin)) {
+						memcpy(&sin, nres->ai_addr,
+						    sizeof(sin));
+						if (sin.sin_addr.s_addr ==
 						    dsfile[i].dsf_sin.sin_addr.s_addr) {
 							fnd = 1;
 							break;
 						}
-					} else if (nres->ai_family == AF_INET6) {
-						sin6 = (struct sockaddr_in6 *)
-						    nres->ai_addr;
-						if (IN6_ARE_ADDR_EQUAL(&sin6->sin6_addr,
+					} else if (nres->ai_family ==
+					    AF_INET6 && nres->ai_addrlen >=
+					    sizeof(sin6)) {
+						memcpy(&sin6, nres->ai_addr,
+						    sizeof(sin));
+						if (IN6_ARE_ADDR_EQUAL(&sin6.sin6_addr,
 						    &dsfile[i].dsf_sin6.sin6_addr)) {
 							fnd = 1;
 							break;


More information about the svn-src-projects mailing list