Skip to content

Commit 9131551

Browse files
Nick ChildNipaLocal
authored andcommitted
ibmvnic: Print data buffers with kernel API's
Previously, data buffers that were to be printed were cast to 8 byte integers and printed. This can lead to buffer overflow if the length of the buffer is not a multiple of 8. Simplify and safeguard printing by using kernel provided functions to print these data blobs. Reviewed-by: Jacob Keller <[email protected]> Signed-off-by: Nick Child <[email protected]> Signed-off-by: NipaLocal <nipa@local>
1 parent b6bfe5b commit 9131551

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

drivers/net/ethernet/ibm/ibmvnic.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4836,6 +4836,7 @@ static int send_login(struct ibmvnic_adapter *adapter)
48364836
struct device *dev = &adapter->vdev->dev;
48374837
struct vnic_login_client_data *vlcd;
48384838
dma_addr_t rsp_buffer_token;
4839+
unsigned char hex_str[16 * 3];
48394840
dma_addr_t buffer_token;
48404841
size_t rsp_buffer_size;
48414842
union ibmvnic_crq crq;
@@ -4939,9 +4940,9 @@ static int send_login(struct ibmvnic_adapter *adapter)
49394940
vnic_add_client_data(adapter, vlcd);
49404941

49414942
netdev_dbg(adapter->netdev, "Login Buffer:\n");
4942-
for (i = 0; i < (adapter->login_buf_sz - 1) / 8 + 1; i++) {
4943-
netdev_dbg(adapter->netdev, "%016lx\n",
4944-
((unsigned long *)(adapter->login_buf))[i]);
4943+
for_each_line_in_hex_dump(i, 16, hex_str, sizeof(hex_str), 8,
4944+
adapter->login_buf, adapter->login_buf_sz) {
4945+
netdev_dbg(adapter->netdev, "%s\n", hex_str);
49454946
}
49464947

49474948
memset(&crq, 0, sizeof(crq));
@@ -5319,15 +5320,17 @@ static void handle_query_ip_offload_rsp(struct ibmvnic_adapter *adapter)
53195320
{
53205321
struct device *dev = &adapter->vdev->dev;
53215322
struct ibmvnic_query_ip_offload_buffer *buf = &adapter->ip_offload_buf;
5323+
unsigned char hex_str[16 * 3];
53225324
int i;
53235325

53245326
dma_unmap_single(dev, adapter->ip_offload_tok,
53255327
sizeof(adapter->ip_offload_buf), DMA_FROM_DEVICE);
53265328

53275329
netdev_dbg(adapter->netdev, "Query IP Offload Buffer:\n");
5328-
for (i = 0; i < (sizeof(adapter->ip_offload_buf) - 1) / 8 + 1; i++)
5329-
netdev_dbg(adapter->netdev, "%016lx\n",
5330-
((unsigned long *)(buf))[i]);
5330+
for_each_line_in_hex_dump(i, 16, hex_str, sizeof(hex_str), 8, buf,
5331+
sizeof(adapter->ip_offload_buf)) {
5332+
netdev_dbg(adapter->netdev, "%s\n", hex_str);
5333+
}
53315334

53325335
netdev_dbg(adapter->netdev, "ipv4_chksum = %d\n", buf->ipv4_chksum);
53335336
netdev_dbg(adapter->netdev, "ipv6_chksum = %d\n", buf->ipv6_chksum);
@@ -5520,6 +5523,7 @@ static int handle_login_rsp(union ibmvnic_crq *login_rsp_crq,
55205523
struct net_device *netdev = adapter->netdev;
55215524
struct ibmvnic_login_rsp_buffer *login_rsp = adapter->login_rsp_buf;
55225525
struct ibmvnic_login_buffer *login = adapter->login_buf;
5526+
unsigned char hex_str[16 * 3];
55235527
u64 *tx_handle_array;
55245528
u64 *rx_handle_array;
55255529
int num_tx_pools;
@@ -5558,9 +5562,10 @@ static int handle_login_rsp(union ibmvnic_crq *login_rsp_crq,
55585562
netdev->mtu = adapter->req_mtu - ETH_HLEN;
55595563

55605564
netdev_dbg(adapter->netdev, "Login Response Buffer:\n");
5561-
for (i = 0; i < (adapter->login_rsp_buf_sz - 1) / 8 + 1; i++) {
5562-
netdev_dbg(adapter->netdev, "%016lx\n",
5563-
((unsigned long *)(adapter->login_rsp_buf))[i]);
5565+
for_each_line_in_hex_dump(i, 16, hex_str, sizeof(hex_str), 8,
5566+
adapter->login_rsp_buf,
5567+
adapter->login_rsp_buf_sz) {
5568+
netdev_dbg(adapter->netdev, "%s\n", hex_str);
55645569
}
55655570

55665571
/* Sanity checks */

0 commit comments

Comments
 (0)