diff --git a/sbin/ifconfig/ifconfig.h b/sbin/ifconfig/ifconfig.h
--- a/sbin/ifconfig/ifconfig.h
+++ b/sbin/ifconfig/ifconfig.h
@@ -251,7 +251,6 @@
 void	opt_register(struct option *);
 
 extern	ifconfig_handle_t *lifh;
-extern	struct ifreq ifr;
 extern	int allmedia;
 extern	int exit_code;
 extern	char *f_inet, *f_inet6, *f_ether, *f_addr;
diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c
--- a/sbin/ifconfig/ifconfig.c
+++ b/sbin/ifconfig/ifconfig.c
@@ -85,14 +85,6 @@
 
 ifconfig_handle_t *lifh;
 
-/*
- * Since "struct ifreq" is composed of various union members, callers
- * should pay special attention to interpret the value.
- * (.e.g. little/big endian difference in the structure.)
- */
-struct	ifreq ifr;
-
-//char	name[IFNAMSIZ];
 #ifdef WITHOUT_NETLINK
 static char	*descr = NULL;
 static size_t	descrlen = 64;
diff --git a/sbin/ifconfig/ifmedia.c b/sbin/ifconfig/ifmedia.c
--- a/sbin/ifconfig/ifmedia.c
+++ b/sbin/ifconfig/ifmedia.c
@@ -179,10 +179,11 @@
 {
 	struct ifmediareq *ifmr = (struct ifmediareq *)arg;
 	static bool did_it = false;
+	struct ifreq ifr = {};
 
 	if (!did_it) {
 		ifr.ifr_media = ifmr->ifm_current;
-		if (ioctl_ctx(ctx, SIOCSIFMEDIA, (caddr_t)&ifr) < 0)
+		if (ioctl_ctx_ifr(ctx, SIOCSIFMEDIA, &ifr) < 0)
 			err(1, "SIOCSIFMEDIA (media)");
 		free(ifmr);
 		did_it = true;
@@ -208,11 +209,9 @@
 	 */
 	subtype = get_media_subtype(ifmr->ifm_ulist[0], val);
 
-	strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name));
-	ifr.ifr_media = (ifmr->ifm_current & IFM_IMASK) |
+	ifmr->ifm_current = (ifmr->ifm_current & IFM_IMASK) |
 	    IFM_TYPE(ifmr->ifm_ulist[0]) | subtype;
 
-	ifmr->ifm_current = ifr.ifr_media;
 	callback_register(setifmediacallback, (void *)ifmr);
 }
 
@@ -240,18 +239,15 @@
 
 	options = get_media_options(ifmr->ifm_ulist[0], val);
 
-	strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name));
-	ifr.ifr_media = ifmr->ifm_current;
 	if (clear)
-		ifr.ifr_media &= ~options;
+		ifmr->ifm_current &= ~options;
 	else {
 		if (options & IFM_HDX) {
-			ifr.ifr_media &= ~IFM_FDX;
+			ifmr->ifm_current &= ~IFM_FDX;
 			options &= ~IFM_HDX;
 		}
-		ifr.ifr_media |= options;
+		ifmr->ifm_current |= options;
 	}
-	ifmr->ifm_current = ifr.ifr_media;
 	callback_register(setifmediacallback, (void *)ifmr);
 }
 
@@ -267,10 +263,8 @@
 	if (inst < 0 || inst > (int)IFM_INST_MAX)
 		errx(1, "invalid media instance: %s", val);
 
-	strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name));
-	ifr.ifr_media = (ifmr->ifm_current & ~IFM_IMASK) | inst << IFM_ISHIFT;
+	ifmr->ifm_current = (ifmr->ifm_current & ~IFM_IMASK) | inst << IFM_ISHIFT;
 
-	ifmr->ifm_current = ifr.ifr_media;
 	callback_register(setifmediacallback, (void *)ifmr);
 }
 
@@ -284,10 +278,8 @@
 
 	mode = get_media_mode(ifmr->ifm_ulist[0], val);
 
-	strlcpy(ifr.ifr_name, ctx->ifname, sizeof(ifr.ifr_name));
-	ifr.ifr_media = (ifmr->ifm_current & ~IFM_MMASK) | mode;
+	ifmr->ifm_current = (ifmr->ifm_current & ~IFM_MMASK) | mode;
 
-	ifmr->ifm_current = ifr.ifr_media;
 	callback_register(setifmediacallback, (void *)ifmr);
 }