tap.c (b69df2608281b71575fbb3b9f426dbcc4be8a700) tap.c (3b23a32a63219f51a5298bc55a65ecee866e79d0)
1// SPDX-License-Identifier: GPL-2.0-only
2#include <linux/etherdevice.h>
3#include <linux/if_tap.h>
4#include <linux/if_vlan.h>
5#include <linux/interrupt.h>
6#include <linux/nsproxy.h>
7#include <linux/compat.h>
8#include <linux/if_tun.h>

--- 1076 unchanged lines hidden (view full) ---

1085 case SIOCGIFHWADDR:
1086 rtnl_lock();
1087 tap = tap_get_tap_dev(q);
1088 if (!tap) {
1089 rtnl_unlock();
1090 return -ENOLINK;
1091 }
1092 ret = 0;
1// SPDX-License-Identifier: GPL-2.0-only
2#include <linux/etherdevice.h>
3#include <linux/if_tap.h>
4#include <linux/if_vlan.h>
5#include <linux/interrupt.h>
6#include <linux/nsproxy.h>
7#include <linux/compat.h>
8#include <linux/if_tun.h>

--- 1076 unchanged lines hidden (view full) ---

1085 case SIOCGIFHWADDR:
1086 rtnl_lock();
1087 tap = tap_get_tap_dev(q);
1088 if (!tap) {
1089 rtnl_unlock();
1090 return -ENOLINK;
1091 }
1092 ret = 0;
1093 u = tap->dev->type;
1093 dev_get_mac_address(&sa, dev_net(tap->dev), tap->dev->name);
1094 if (copy_to_user(&ifr->ifr_name, tap->dev->name, IFNAMSIZ) ||
1094 if (copy_to_user(&ifr->ifr_name, tap->dev->name, IFNAMSIZ) ||
1095 copy_to_user(&ifr->ifr_hwaddr.sa_data, tap->dev->dev_addr, ETH_ALEN) ||
1096 put_user(u, &ifr->ifr_hwaddr.sa_family))
1095 copy_to_user(&ifr->ifr_hwaddr, &sa, sizeof(sa)))
1097 ret = -EFAULT;
1098 tap_put_tap_dev(tap);
1099 rtnl_unlock();
1100 return ret;
1101
1102 case SIOCSIFHWADDR:
1103 if (copy_from_user(&sa, &ifr->ifr_hwaddr, sizeof(sa)))
1104 return -EFAULT;
1105 rtnl_lock();
1106 tap = tap_get_tap_dev(q);
1107 if (!tap) {
1108 rtnl_unlock();
1109 return -ENOLINK;
1110 }
1096 ret = -EFAULT;
1097 tap_put_tap_dev(tap);
1098 rtnl_unlock();
1099 return ret;
1100
1101 case SIOCSIFHWADDR:
1102 if (copy_from_user(&sa, &ifr->ifr_hwaddr, sizeof(sa)))
1103 return -EFAULT;
1104 rtnl_lock();
1105 tap = tap_get_tap_dev(q);
1106 if (!tap) {
1107 rtnl_unlock();
1108 return -ENOLINK;
1109 }
1111 ret = dev_set_mac_address(tap->dev, &sa, NULL);
1110 ret = dev_set_mac_address_user(tap->dev, &sa, NULL);
1112 tap_put_tap_dev(tap);
1113 rtnl_unlock();
1114 return ret;
1115
1116 default:
1117 return -EINVAL;
1118 }
1119}

--- 247 unchanged lines hidden ---
1111 tap_put_tap_dev(tap);
1112 rtnl_unlock();
1113 return ret;
1114
1115 default:
1116 return -EINVAL;
1117 }
1118}

--- 247 unchanged lines hidden ---