Skip to content

Commit

Permalink
net: hns3: format the output of the MAC address
Browse files Browse the repository at this point in the history
Printing the whole MAC addresse may bring security risks. Therefore,
the MAC address is partially encrypted to improve security.

Signed-off-by: Yufeng Mo <moyufeng@huawei.com>
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Yufeng Mo authored and David S. Miller committed Nov 24, 2021
1 parent d9069da commit 4f331fd
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 31 deletions.
14 changes: 14 additions & 0 deletions drivers/net/ethernet/hisilicon/hns3/hnae3.h
Original file line number Diff line number Diff line change
Expand Up @@ -859,6 +859,20 @@ struct hnae3_handle {
#define hnae3_get_bit(origin, shift) \
hnae3_get_field(origin, 0x1 << (shift), shift)

#define HNAE3_FORMAT_MAC_ADDR_LEN 18
#define HNAE3_FORMAT_MAC_ADDR_OFFSET_0 0
#define HNAE3_FORMAT_MAC_ADDR_OFFSET_4 4
#define HNAE3_FORMAT_MAC_ADDR_OFFSET_5 5

static inline void hnae3_format_mac_addr(char *format_mac_addr,
const u8 *mac_addr)
{
snprintf(format_mac_addr, HNAE3_FORMAT_MAC_ADDR_LEN, "%02x:**:**:**:%02x:%02x",
mac_addr[HNAE3_FORMAT_MAC_ADDR_OFFSET_0],
mac_addr[HNAE3_FORMAT_MAC_ADDR_OFFSET_4],
mac_addr[HNAE3_FORMAT_MAC_ADDR_OFFSET_5]);
}

int hnae3_register_ae_dev(struct hnae3_ae_dev *ae_dev);
void hnae3_unregister_ae_dev(struct hnae3_ae_dev *ae_dev);

Expand Down
29 changes: 20 additions & 9 deletions drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
Original file line number Diff line number Diff line change
Expand Up @@ -2251,6 +2251,8 @@ netdev_tx_t hns3_nic_net_xmit(struct sk_buff *skb, struct net_device *netdev)

static int hns3_nic_net_set_mac_address(struct net_device *netdev, void *p)
{
char format_mac_addr_perm[HNAE3_FORMAT_MAC_ADDR_LEN];
char format_mac_addr_sa[HNAE3_FORMAT_MAC_ADDR_LEN];
struct hnae3_handle *h = hns3_get_handle(netdev);
struct sockaddr *mac_addr = p;
int ret;
Expand All @@ -2259,8 +2261,9 @@ static int hns3_nic_net_set_mac_address(struct net_device *netdev, void *p)
return -EADDRNOTAVAIL;

if (ether_addr_equal(netdev->dev_addr, mac_addr->sa_data)) {
netdev_info(netdev, "already using mac address %pM\n",
mac_addr->sa_data);
hnae3_format_mac_addr(format_mac_addr_sa, mac_addr->sa_data);
netdev_info(netdev, "already using mac address %s\n",
format_mac_addr_sa);
return 0;
}

Expand All @@ -2269,8 +2272,10 @@ static int hns3_nic_net_set_mac_address(struct net_device *netdev, void *p)
*/
if (!hns3_is_phys_func(h->pdev) &&
!is_zero_ether_addr(netdev->perm_addr)) {
netdev_err(netdev, "has permanent MAC %pM, user MAC %pM not allow\n",
netdev->perm_addr, mac_addr->sa_data);
hnae3_format_mac_addr(format_mac_addr_perm, netdev->perm_addr);
hnae3_format_mac_addr(format_mac_addr_sa, mac_addr->sa_data);
netdev_err(netdev, "has permanent MAC %s, user MAC %s not allow\n",
format_mac_addr_perm, format_mac_addr_sa);
return -EPERM;
}

Expand Down Expand Up @@ -2832,14 +2837,16 @@ static int hns3_nic_set_vf_rate(struct net_device *ndev, int vf,
static int hns3_nic_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac)
{
struct hnae3_handle *h = hns3_get_handle(netdev);
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];

if (!h->ae_algo->ops->set_vf_mac)
return -EOPNOTSUPP;

if (is_multicast_ether_addr(mac)) {
hnae3_format_mac_addr(format_mac_addr, mac);
netdev_err(netdev,
"Invalid MAC:%pM specified. Could not set MAC\n",
mac);
"Invalid MAC:%s specified. Could not set MAC\n",
format_mac_addr);
return -EINVAL;
}

Expand Down Expand Up @@ -4930,6 +4937,7 @@ static void hns3_uninit_all_ring(struct hns3_nic_priv *priv)
static int hns3_init_mac_addr(struct net_device *netdev)
{
struct hns3_nic_priv *priv = netdev_priv(netdev);
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
struct hnae3_handle *h = priv->ae_handle;
u8 mac_addr_temp[ETH_ALEN];
int ret = 0;
Expand All @@ -4940,8 +4948,9 @@ static int hns3_init_mac_addr(struct net_device *netdev)
/* Check if the MAC address is valid, if not get a random one */
if (!is_valid_ether_addr(mac_addr_temp)) {
eth_hw_addr_random(netdev);
dev_warn(priv->dev, "using random MAC address %pM\n",
netdev->dev_addr);
hnae3_format_mac_addr(format_mac_addr, netdev->dev_addr);
dev_warn(priv->dev, "using random MAC address %s\n",
format_mac_addr);
} else if (!ether_addr_equal(netdev->dev_addr, mac_addr_temp)) {
eth_hw_addr_set(netdev, mac_addr_temp);
ether_addr_copy(netdev->perm_addr, mac_addr_temp);
Expand Down Expand Up @@ -4993,8 +5002,10 @@ static void hns3_client_stop(struct hnae3_handle *handle)
static void hns3_info_show(struct hns3_nic_priv *priv)
{
struct hnae3_knic_private_info *kinfo = &priv->ae_handle->kinfo;
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];

dev_info(priv->dev, "MAC address: %pM\n", priv->netdev->dev_addr);
hnae3_format_mac_addr(format_mac_addr, priv->netdev->dev_addr);
dev_info(priv->dev, "MAC address: %s\n", format_mac_addr);
dev_info(priv->dev, "Task queue pairs numbers: %u\n", kinfo->num_tqps);
dev_info(priv->dev, "RSS size: %u\n", kinfo->rss_size);
dev_info(priv->dev, "Allocated RSS size: %u\n", kinfo->req_rss_size);
Expand Down
55 changes: 35 additions & 20 deletions drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -8761,6 +8761,7 @@ int hclge_update_mac_list(struct hclge_vport *vport,
enum HCLGE_MAC_ADDR_TYPE mac_type,
const unsigned char *addr)
{
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
struct hclge_dev *hdev = vport->back;
struct hclge_mac_node *mac_node;
struct list_head *list;
Expand All @@ -8785,9 +8786,10 @@ int hclge_update_mac_list(struct hclge_vport *vport,
/* if this address is never added, unnecessary to delete */
if (state == HCLGE_MAC_TO_DEL) {
spin_unlock_bh(&vport->mac_list_lock);
hnae3_format_mac_addr(format_mac_addr, addr);
dev_err(&hdev->pdev->dev,
"failed to delete address %pM from mac list\n",
addr);
"failed to delete address %s from mac list\n",
format_mac_addr);
return -ENOENT;
}

Expand Down Expand Up @@ -8820,6 +8822,7 @@ static int hclge_add_uc_addr(struct hnae3_handle *handle,
int hclge_add_uc_addr_common(struct hclge_vport *vport,
const unsigned char *addr)
{
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
struct hclge_dev *hdev = vport->back;
struct hclge_mac_vlan_tbl_entry_cmd req;
struct hclge_desc desc;
Expand All @@ -8830,9 +8833,10 @@ int hclge_add_uc_addr_common(struct hclge_vport *vport,
if (is_zero_ether_addr(addr) ||
is_broadcast_ether_addr(addr) ||
is_multicast_ether_addr(addr)) {
hnae3_format_mac_addr(format_mac_addr, addr);
dev_err(&hdev->pdev->dev,
"Set_uc mac err! invalid mac:%pM. is_zero:%d,is_br=%d,is_mul=%d\n",
addr, is_zero_ether_addr(addr),
"Set_uc mac err! invalid mac:%s. is_zero:%d,is_br=%d,is_mul=%d\n",
format_mac_addr, is_zero_ether_addr(addr),
is_broadcast_ether_addr(addr),
is_multicast_ether_addr(addr));
return -EINVAL;
Expand Down Expand Up @@ -8889,6 +8893,7 @@ static int hclge_rm_uc_addr(struct hnae3_handle *handle,
int hclge_rm_uc_addr_common(struct hclge_vport *vport,
const unsigned char *addr)
{
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
struct hclge_dev *hdev = vport->back;
struct hclge_mac_vlan_tbl_entry_cmd req;
int ret;
Expand All @@ -8897,8 +8902,9 @@ int hclge_rm_uc_addr_common(struct hclge_vport *vport,
if (is_zero_ether_addr(addr) ||
is_broadcast_ether_addr(addr) ||
is_multicast_ether_addr(addr)) {
dev_dbg(&hdev->pdev->dev, "Remove mac err! invalid mac:%pM.\n",
addr);
hnae3_format_mac_addr(format_mac_addr, addr);
dev_dbg(&hdev->pdev->dev, "Remove mac err! invalid mac:%s.\n",
format_mac_addr);
return -EINVAL;
}

Expand Down Expand Up @@ -8929,6 +8935,7 @@ static int hclge_add_mc_addr(struct hnae3_handle *handle,
int hclge_add_mc_addr_common(struct hclge_vport *vport,
const unsigned char *addr)
{
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
struct hclge_dev *hdev = vport->back;
struct hclge_mac_vlan_tbl_entry_cmd req;
struct hclge_desc desc[3];
Expand All @@ -8937,9 +8944,10 @@ int hclge_add_mc_addr_common(struct hclge_vport *vport,

/* mac addr check */
if (!is_multicast_ether_addr(addr)) {
hnae3_format_mac_addr(format_mac_addr, addr);
dev_err(&hdev->pdev->dev,
"Add mc mac err! invalid mac:%pM.\n",
addr);
"Add mc mac err! invalid mac:%s.\n",
format_mac_addr);
return -EINVAL;
}
memset(&req, 0, sizeof(req));
Expand Down Expand Up @@ -8991,16 +8999,18 @@ static int hclge_rm_mc_addr(struct hnae3_handle *handle,
int hclge_rm_mc_addr_common(struct hclge_vport *vport,
const unsigned char *addr)
{
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
struct hclge_dev *hdev = vport->back;
struct hclge_mac_vlan_tbl_entry_cmd req;
enum hclge_cmd_status status;
struct hclge_desc desc[3];

/* mac addr check */
if (!is_multicast_ether_addr(addr)) {
hnae3_format_mac_addr(format_mac_addr, addr);
dev_dbg(&hdev->pdev->dev,
"Remove mc mac err! invalid mac:%pM.\n",
addr);
"Remove mc mac err! invalid mac:%s.\n",
format_mac_addr);
return -EINVAL;
}

Expand Down Expand Up @@ -9440,30 +9450,32 @@ static int hclge_set_vf_mac(struct hnae3_handle *handle, int vf,
u8 *mac_addr)
{
struct hclge_vport *vport = hclge_get_vport(handle);
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
struct hclge_dev *hdev = vport->back;

vport = hclge_get_vf_vport(hdev, vf);
if (!vport)
return -EINVAL;

hnae3_format_mac_addr(format_mac_addr, mac_addr);
if (ether_addr_equal(mac_addr, vport->vf_info.mac)) {
dev_info(&hdev->pdev->dev,
"Specified MAC(=%pM) is same as before, no change committed!\n",
mac_addr);
"Specified MAC(=%s) is same as before, no change committed!\n",
format_mac_addr);
return 0;
}

ether_addr_copy(vport->vf_info.mac, mac_addr);

if (test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state)) {
dev_info(&hdev->pdev->dev,
"MAC of VF %d has been set to %pM, and it will be reinitialized!\n",
vf, mac_addr);
"MAC of VF %d has been set to %s, and it will be reinitialized!\n",
vf, format_mac_addr);
return hclge_inform_reset_assert_to_vf(vport);
}

dev_info(&hdev->pdev->dev, "MAC of VF %d has been set to %pM\n",
vf, mac_addr);
dev_info(&hdev->pdev->dev, "MAC of VF %d has been set to %s\n",
vf, format_mac_addr);
return 0;
}

Expand Down Expand Up @@ -9567,6 +9579,7 @@ static int hclge_set_mac_addr(struct hnae3_handle *handle, const void *p,
{
const unsigned char *new_addr = (const unsigned char *)p;
struct hclge_vport *vport = hclge_get_vport(handle);
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
struct hclge_dev *hdev = vport->back;
unsigned char *old_addr = NULL;
int ret;
Expand All @@ -9575,9 +9588,10 @@ static int hclge_set_mac_addr(struct hnae3_handle *handle, const void *p,
if (is_zero_ether_addr(new_addr) ||
is_broadcast_ether_addr(new_addr) ||
is_multicast_ether_addr(new_addr)) {
hnae3_format_mac_addr(format_mac_addr, new_addr);
dev_err(&hdev->pdev->dev,
"change uc mac err! invalid mac: %pM.\n",
new_addr);
"change uc mac err! invalid mac: %s.\n",
format_mac_addr);
return -EINVAL;
}

Expand All @@ -9595,9 +9609,10 @@ static int hclge_set_mac_addr(struct hnae3_handle *handle, const void *p,
spin_lock_bh(&vport->mac_list_lock);
ret = hclge_update_mac_node_for_dev_addr(vport, old_addr, new_addr);
if (ret) {
hnae3_format_mac_addr(format_mac_addr, new_addr);
dev_err(&hdev->pdev->dev,
"failed to change the mac addr:%pM, ret = %d\n",
new_addr, ret);
"failed to change the mac addr:%s, ret = %d\n",
format_mac_addr, ret);
spin_unlock_bh(&vport->mac_list_lock);

if (!is_first)
Expand Down
7 changes: 5 additions & 2 deletions drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1514,15 +1514,18 @@ static void hclgevf_config_mac_list(struct hclgevf_dev *hdev,
struct list_head *list,
enum HCLGEVF_MAC_ADDR_TYPE mac_type)
{
char format_mac_addr[HNAE3_FORMAT_MAC_ADDR_LEN];
struct hclgevf_mac_addr_node *mac_node, *tmp;
int ret;

list_for_each_entry_safe(mac_node, tmp, list, node) {
ret = hclgevf_add_del_mac_addr(hdev, mac_node, mac_type);
if (ret) {
hnae3_format_mac_addr(format_mac_addr,
mac_node->mac_addr);
dev_err(&hdev->pdev->dev,
"failed to configure mac %pM, state = %d, ret = %d\n",
mac_node->mac_addr, mac_node->state, ret);
"failed to configure mac %s, state = %d, ret = %d\n",
format_mac_addr, mac_node->state, ret);
return;
}
if (mac_node->state == HCLGEVF_MAC_TO_ADD) {
Expand Down

0 comments on commit 4f331fd

Please sign in to comment.