[SRU][Cosmic][Bionic][PATCH 1/6] s390/qeth: sanitize strings in debug messages
Kleber Souza
kleber.souza at canonical.com
Thu Nov 8 09:59:47 UTC 2018
On 11/07/18 19:22, Frank Heimes wrote:
> From: Julian Wiedmann <jwi at linux.ibm.com>
>
> BugLink: http://bugs.launchpad.net/bugs/1797367
>
> s390/qeth: sanitize strings in debug messages
>
> As Documentation/s390/s390dbf.txt states quite clearly, using any
> pointer in sprinf-formatted s390dbf debug entries is dangerous.
> The pointers are dereferenced whenever the trace file is read from.
> So if the referenced data has a shorter life-time than the trace file,
> any read operation can result in a use-after-free.
>
> So rip out all hazardous use of indirect data, and replace any usage of
> dev_name() and such by the Bus ID number.
>
> Signed-off-by: Julian Wiedmann <jwi at linux.ibm.com>
> Signed-off-by: David S. Miller <davem at davemloft.net>
> (cherry-picked from commit e19e5be8b4cafa8b3f8b0cd1b1dfe20fa0145b83)
> Signed-off-by: Frank Heimes <frank.heimes at canonical.com>
>
> ---
>
> diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h
> index 6843bc7..884ba9d 100644
> --- a/drivers/s390/net/qeth_core.h
> +++ b/drivers/s390/net/qeth_core.h
> @@ -87,6 +87,18 @@ struct qeth_dbf_info {
> #define SENSE_RESETTING_EVENT_BYTE 1
> #define SENSE_RESETTING_EVENT_FLAG 0x80
>
> +static inline u32 qeth_get_device_id(struct ccw_device *cdev)
> +{
> + struct ccw_dev_id dev_id;
> + u32 id;
> +
> + ccw_device_get_id(cdev, &dev_id);
> + id = dev_id.devno;
> + id |= (u32) (dev_id.ssid << 16);
> +
> + return id;
> +}
> +
> /*
> * Common IO related definitions
> */
> @@ -97,7 +109,8 @@ struct qeth_dbf_info {
> #define CARD_RDEV_ID(card) dev_name(&card->read.ccwdev->dev)
> #define CARD_WDEV_ID(card) dev_name(&card->write.ccwdev->dev)
> #define CARD_DDEV_ID(card) dev_name(&card->data.ccwdev->dev)
> -#define CHANNEL_ID(channel) dev_name(&channel->ccwdev->dev)
> +#define CCW_DEVID(cdev) (qeth_get_device_id(cdev))
> +#define CARD_DEVID(card) (CCW_DEVID(CARD_RDEV(card)))
>
> /**
> * card stuff
> diff --git a/drivers/s390/net/qeth_core_main.c
> b/drivers/s390/net/qeth_core_main.c
> index 3274f13..639ac0a 100644
> --- a/drivers/s390/net/qeth_core_main.c
> +++ b/drivers/s390/net/qeth_core_main.c
> @@ -554,8 +554,8 @@ static int __qeth_issue_next_read(struct qeth_card *card)
> if (!iob) {
> dev_warn(&card->gdev->dev, "The qeth device driver "
> "failed to recover an error on the device\n");
> - QETH_DBF_MESSAGE(2, "%s issue_next_read failed: no iob "
> - "available\n", dev_name(&card->gdev->dev));
> + QETH_DBF_MESSAGE(2, "issue_next_read on device %x
> failed: no iob available\n",
The above line shouldn't have been broken on the email, as it's a single
line on the original commit.
Also happened on a couple of addition lines below and on patch 3/6 at least.
Maybe your editor or email client is breaking lines with more than 80
columns?
Anyway we can probably cherry-pick the patches ourselves so no need to
resubmit for now.
Thanks,
Kleber
> + CARD_DEVID(card));
> return -ENOMEM;
> }
> qeth_setup_ccw(channel->ccw, CCW_CMD_READ, QETH_BUFSIZE, iob->data);
> @@ -563,8 +563,8 @@ static int __qeth_issue_next_read(struct qeth_card *card)
> rc = ccw_device_start(channel->ccwdev, channel->ccw,
> (addr_t) iob, 0, 0);
> if (rc) {
> - QETH_DBF_MESSAGE(2, "%s error in starting next read ccw! "
> - "rc=%i\n", dev_name(&card->gdev->dev), rc);
> + QETH_DBF_MESSAGE(2, "error %i on device %x when
> starting next read ccw!\n",
> + rc, CARD_DEVID(card));
> atomic_set(&channel->irq_pending, 0);
> card->read_or_write_problem = 1;
> qeth_schedule_recovery(card);
> @@ -613,16 +613,14 @@ static void qeth_issue_ipa_msg(struct
> qeth_ipa_cmd *cmd, int rc,
> const char *ipa_name;
> int com = cmd->hdr.command;
> ipa_name = qeth_get_ipa_cmd_name(com);
> +
> if (rc)
> - QETH_DBF_MESSAGE(2, "IPA: %s(x%X) for %s/%s returned "
> - "x%X \"%s\"\n",
> - ipa_name, com, dev_name(&card->gdev->dev),
> - QETH_CARD_IFNAME(card), rc,
> - qeth_get_ipa_msg(rc));
> + QETH_DBF_MESSAGE(2, "IPA: %s(%#x) for device %x
> returned %#x \"%s\"\n",
> + ipa_name, com, CARD_DEVID(card), rc,
> + qeth_get_ipa_msg(rc));
> else
> - QETH_DBF_MESSAGE(5, "IPA: %s(x%X) for %s/%s succeeded\n",
> - ipa_name, com, dev_name(&card->gdev->dev),
> - QETH_CARD_IFNAME(card));
> + QETH_DBF_MESSAGE(5, "IPA: %s(%#x) for device %x succeeded\n",
> + ipa_name, com, CARD_DEVID(card));
> }
>
> static struct qeth_ipa_cmd *qeth_check_ipa_data(struct qeth_card *card,
> @@ -711,7 +709,7 @@ static int qeth_check_idx_response(struct qeth_card *card,
>
> QETH_DBF_HEX(CTRL, 2, buffer, QETH_DBF_CTRL_LEN);
> if ((buffer[2] & 0xc0) == 0xc0) {
> - QETH_DBF_MESSAGE(2, "received an IDX TERMINATE with
> cause code %#02x\n",
> + QETH_DBF_MESSAGE(2, "received an IDX TERMINATE with
> cause code %#04x\n",
> buffer[4]);
> QETH_CARD_TEXT(card, 2, "ckidxres");
> QETH_CARD_TEXT(card, 2, " idxterm");
> @@ -972,8 +970,8 @@ static int qeth_get_problem(struct qeth_card
> *card, struct ccw_device *cdev,
> QETH_CARD_TEXT(card, 2, "CGENCHK");
> dev_warn(&cdev->dev, "The qeth device driver "
> "failed to recover an error on the device\n");
> - QETH_DBF_MESSAGE(2, "%s check on device dstat=x%x, cstat=x%x\n",
> - dev_name(&cdev->dev), dstat, cstat);
> + QETH_DBF_MESSAGE(2, "check on channel %x with
> dstat=%#x, cstat=%#x\n",
> + CCW_DEVID(cdev), dstat, cstat);
> print_hex_dump(KERN_WARNING, "qeth: irb ", DUMP_PREFIX_OFFSET,
> 16, 1, irb, 64, 1);
> return 1;
> @@ -1013,8 +1011,8 @@ static long qeth_check_irb_error(struct qeth_card *card,
>
> switch (PTR_ERR(irb)) {
> case -EIO:
> - QETH_DBF_MESSAGE(2, "%s i/o-error on device\n",
> - dev_name(&cdev->dev));
> + QETH_DBF_MESSAGE(2, "i/o-error on channel %x\n",
> + CCW_DEVID(cdev));
> QETH_CARD_TEXT(card, 2, "ckirberr");
> QETH_CARD_TEXT_(card, 2, " rc%d", -EIO);
> break;
> @@ -1031,8 +1029,8 @@ static long qeth_check_irb_error(struct qeth_card *card,
> }
> break;
> default:
> - QETH_DBF_MESSAGE(2, "%s unknown error %ld on device\n",
> - dev_name(&cdev->dev), PTR_ERR(irb));
> + QETH_DBF_MESSAGE(2, "unknown error %ld on channel %x\n",
> + PTR_ERR(irb), CCW_DEVID(cdev));
> QETH_CARD_TEXT(card, 2, "ckirberr");
> QETH_CARD_TEXT(card, 2, " rc???");
> }
> @@ -1114,9 +1112,9 @@ static void qeth_irq(struct ccw_device *cdev,
> unsigned long intparm,
> dev_warn(&channel->ccwdev->dev,
> "The qeth device driver failed to recover "
> "an error on the device\n");
> - QETH_DBF_MESSAGE(2, "%s sense data available. cstat "
> - "0x%X dstat 0x%X\n",
> - dev_name(&channel->ccwdev->dev), cstat, dstat);
> + QETH_DBF_MESSAGE(2, "sense data available on
> channel %x: cstat %#X dstat %#X\n",
> + CCW_DEVID(channel->ccwdev), cstat,
> + dstat);
> print_hex_dump(KERN_WARNING, "qeth: irb ",
> DUMP_PREFIX_OFFSET, 16, 1, irb, 32, 1);
> print_hex_dump(KERN_WARNING, "qeth: sense data ",
> @@ -1890,8 +1888,8 @@ static int qeth_idx_activate_channel(struct
> qeth_card *card,
> if (channel->state != CH_STATE_ACTIVATING) {
> dev_warn(&channel->ccwdev->dev, "The qeth device driver"
> " failed to recover an error on the device\n");
> - QETH_DBF_MESSAGE(2, "%s IDX activate timed out\n",
> - dev_name(&channel->ccwdev->dev));
> + QETH_DBF_MESSAGE(2, "IDX activate timed out on channel %x\n",
> + CCW_DEVID(channel->ccwdev));
> QETH_DBF_TEXT_(SETUP, 2, "2err%d", -ETIME);
> return -ETIME;
> }
> @@ -1926,17 +1924,15 @@ static void qeth_idx_write_cb(struct qeth_card *card,
> "The adapter is used exclusively by another "
> "host\n");
> else
> - QETH_DBF_MESSAGE(2, "%s IDX_ACTIVATE on write channel:"
> - " negative reply\n",
> - dev_name(&channel->ccwdev->dev));
> + QETH_DBF_MESSAGE(2, "IDX_ACTIVATE on channel
> %x: negative reply\n",
> + CCW_DEVID(channel->ccwdev));
> goto out;
> }
> memcpy(&temp, QETH_IDX_ACT_FUNC_LEVEL(iob->data), 2);
> if ((temp & ~0x0100) != qeth_peer_func_level(card->info.func_level)) {
> - QETH_DBF_MESSAGE(2, "%s IDX_ACTIVATE on write channel: "
> - "function level mismatch (sent: 0x%x, received: "
> - "0x%x)\n", dev_name(&channel->ccwdev->dev),
> - card->info.func_level, temp);
> + QETH_DBF_MESSAGE(2, "IDX_ACTIVATE on channel %x:
> function level mismatch (sent: %#x, received: %#x)\n",
> + CCW_DEVID(channel->ccwdev),
> + card->info.func_level, temp);
> goto out;
> }
> channel->state = CH_STATE_UP;
> @@ -1973,9 +1969,8 @@ static void qeth_idx_read_cb(struct qeth_card *card,
> "insufficient authorization\n");
> break;
> default:
> - QETH_DBF_MESSAGE(2, "%s IDX_ACTIVATE on read channel:"
> - " negative reply\n",
> - dev_name(&channel->ccwdev->dev));
> + QETH_DBF_MESSAGE(2, "IDX_ACTIVATE on channel
> %x: negative reply\n",
> + CCW_DEVID(channel->ccwdev));
> }
> QETH_CARD_TEXT_(card, 2, "idxread%c",
> QETH_IDX_ACT_CAUSE_CODE(iob->data));
> @@ -1984,10 +1979,9 @@ static void qeth_idx_read_cb(struct qeth_card *card,
>
> memcpy(&temp, QETH_IDX_ACT_FUNC_LEVEL(iob->data), 2);
> if (temp != qeth_peer_func_level(card->info.func_level)) {
> - QETH_DBF_MESSAGE(2, "%s IDX_ACTIVATE on read channel: function "
> - "level mismatch (sent: 0x%x, received: 0x%x)\n",
> - dev_name(&channel->ccwdev->dev),
> - card->info.func_level, temp);
> + QETH_DBF_MESSAGE(2, "IDX_ACTIVATE on channel %x:
> function level mismatch (sent: %#x, received: %#x)\n",
> + CCW_DEVID(channel->ccwdev),
> + card->info.func_level, temp);
> goto out;
> }
> memcpy(&card->token.issuer_rm_r,
> @@ -2096,9 +2090,8 @@ int qeth_send_control_data(struct qeth_card
> *card, int len,
> (addr_t) iob, 0, 0, event_timeout);
> spin_unlock_irq(get_ccwdev_lock(channel->ccwdev));
> if (rc) {
> - QETH_DBF_MESSAGE(2, "%s qeth_send_control_data: "
> - "ccw_device_start rc = %i\n",
> - dev_name(&channel->ccwdev->dev), rc);
> + QETH_DBF_MESSAGE(2, "qeth_send_control_data on device
> %x: ccw_device_start rc = %i\n",
> + CARD_DEVID(card), rc);
> QETH_CARD_TEXT_(card, 2, " err%d", rc);
> spin_lock_irq(&card->lock);
> list_del_init(&reply->list);
> @@ -2853,8 +2846,8 @@ struct qeth_cmd_buffer
> *qeth_get_ipacmd_buffer(struct qeth_card *card,
> } else {
> dev_warn(&card->gdev->dev,
> "The qeth driver ran out of channel command
> buffers\n");
> - QETH_DBF_MESSAGE(1, "%s The qeth driver ran out of
> channel command buffers",
> - dev_name(&card->gdev->dev));
> + QETH_DBF_MESSAGE(1, "device %x ran out of channel
> command buffers",
> + CARD_DEVID(card));
> }
>
> return iob;
> @@ -2989,10 +2982,9 @@ static int qeth_query_ipassists_cb(struct
> qeth_card *card,
> return 0;
> default:
> if (cmd->hdr.return_code) {
> - QETH_DBF_MESSAGE(1, "%s IPA_CMD_QIPASSIST: Unhandled "
> - "rc=%d\n",
> - dev_name(&card->gdev->dev),
> - cmd->hdr.return_code);
> + QETH_DBF_MESSAGE(1, "IPA_CMD_QIPASSIST on
> device %x: Unhandled rc=%#x\n",
> + CARD_DEVID(card),
> + cmd->hdr.return_code);
> return 0;
> }
> }
> @@ -3004,8 +2996,8 @@ static int qeth_query_ipassists_cb(struct qeth_card *card,
> card->options.ipa6.supported_funcs = cmd->hdr.ipa_supported;
> card->options.ipa6.enabled_funcs = cmd->hdr.ipa_enabled;
> } else
> - QETH_DBF_MESSAGE(1, "%s IPA_CMD_QIPASSIST: Flawed LIC detected"
> - "\n", dev_name(&card->gdev->dev));
> + QETH_DBF_MESSAGE(1, "IPA_CMD_QIPASSIST on device %x:
> Flawed LIC detected\n",
> + CARD_DEVID(card));
> return 0;
> }
>
> @@ -4297,10 +4289,9 @@ static int
> qeth_setadpparms_set_access_ctrl_cb(struct qeth_card *card,
> cmd->data.setadapterparms.hdr.return_code);
> if (cmd->data.setadapterparms.hdr.return_code !=
> SET_ACCESS_CTRL_RC_SUCCESS)
> - QETH_DBF_MESSAGE(3, "ERR:SET_ACCESS_CTRL(%s,%d)==%d\n",
> - card->gdev->dev.kobj.name,
> - access_ctrl_req->subcmd_code,
> - cmd->data.setadapterparms.hdr.return_code);
> + QETH_DBF_MESSAGE(3, "ERR:SET_ACCESS_CTRL(%#x) on
> device %x: %#x\n",
> + access_ctrl_req->subcmd_code, CARD_DEVID(card),
> + cmd->data.setadapterparms.hdr.return_code);
> switch (cmd->data.setadapterparms.hdr.return_code) {
> case SET_ACCESS_CTRL_RC_SUCCESS:
> if (card->options.isolation == ISOLATION_MODE_NONE) {
> @@ -4312,14 +4303,14 @@ static int
> qeth_setadpparms_set_access_ctrl_cb(struct qeth_card *card,
> }
> break;
> case SET_ACCESS_CTRL_RC_ALREADY_NOT_ISOLATED:
> - QETH_DBF_MESSAGE(2, "%s QDIO data connection isolation already "
> - "deactivated\n", dev_name(&card->gdev->dev));
> + QETH_DBF_MESSAGE(2, "QDIO data connection isolation on
> device %x already deactivated\n",
> + CARD_DEVID(card));
> if (fallback)
> card->options.isolation = card->options.prev_isolation;
> break;
> case SET_ACCESS_CTRL_RC_ALREADY_ISOLATED:
> - QETH_DBF_MESSAGE(2, "%s QDIO data connection isolation already"
> - " activated\n", dev_name(&card->gdev->dev));
> + QETH_DBF_MESSAGE(2, "QDIO data connection isolation on
> device %x already activated\n",
> + CARD_DEVID(card));
> if (fallback)
> card->options.isolation = card->options.prev_isolation;
> break;
> @@ -4405,10 +4396,8 @@ int qeth_set_access_ctrl_online(struct
> qeth_card *card, int fallback)
> rc = qeth_setadpparms_set_access_ctrl(card,
> card->options.isolation, fallback);
> if (rc) {
> - QETH_DBF_MESSAGE(3,
> - "IPA(SET_ACCESS_CTRL,%s,%d) sent failed\n",
> - card->gdev->dev.kobj.name,
> - rc);
> + QETH_DBF_MESSAGE(3, "IPA(SET_ACCESS_CTRL(%d)
> on device %x: sent failed\n",
> + rc, CARD_DEVID(card));
> rc = -EOPNOTSUPP;
> }
> } else if (card->options.isolation != ISOLATION_MODE_NONE) {
> @@ -4634,8 +4623,8 @@ static int qeth_snmp_command(struct qeth_card
> *card, char __user *udata)
> rc = qeth_send_ipa_snmp_cmd(card, iob, QETH_SETADP_BASE_LEN + req_len,
> qeth_snmp_command_cb, (void *)&qinfo);
> if (rc)
> - QETH_DBF_MESSAGE(2, "SNMP command failed on %s: (0x%x)\n",
> - QETH_CARD_IFNAME(card), rc);
> + QETH_DBF_MESSAGE(2, "SNMP command failed on device %x: (%#x)\n",
> + CARD_DEVID(card), rc);
> else {
> if (copy_to_user(udata, qinfo.udata, qinfo.udata_len))
> rc = -EFAULT;
> @@ -4869,8 +4858,8 @@ static void qeth_determine_capabilities(struct
> qeth_card *card)
>
> rc = qeth_read_conf_data(card, (void **) &prcd, &length);
> if (rc) {
> - QETH_DBF_MESSAGE(2, "%s qeth_read_conf_data returned %i\n",
> - dev_name(&card->gdev->dev), rc);
> + QETH_DBF_MESSAGE(2, "qeth_read_conf_data on device %x
> returned %i\n",
> + CARD_DEVID(card), rc);
> QETH_DBF_TEXT_(SETUP, 2, "5err%d", rc);
> goto out_offline;
> }
> @@ -5096,8 +5085,8 @@ int qeth_core_hardsetup_card(struct qeth_card *card)
> qeth_update_from_chp_desc(card);
> retry:
> if (retries < 3)
> - QETH_DBF_MESSAGE(2, "%s Retrying to do IDX activates.\n",
> - dev_name(&card->gdev->dev));
> + QETH_DBF_MESSAGE(2, "Retrying to do IDX activates on
> device %x.\n",
> + CARD_DEVID(card));
> rc = qeth_qdio_clear_card(card, card->info.type != QETH_CARD_TYPE_IQD);
> ccw_device_set_offline(CARD_DDEV(card));
> ccw_device_set_offline(CARD_WDEV(card));
> @@ -5201,8 +5190,8 @@ int qeth_core_hardsetup_card(struct qeth_card *card)
> out:
> dev_warn(&card->gdev->dev, "The qeth device driver failed to recover "
> "an error on the device\n");
> - QETH_DBF_MESSAGE(2, "%s Initialization in hardsetup failed! rc=%d\n",
> - dev_name(&card->gdev->dev), rc);
> + QETH_DBF_MESSAGE(2, "Initialization for device %x failed in
> hardsetup! rc=%d\n",
> + CARD_DEVID(card), rc);
> return rc;
> }
> EXPORT_SYMBOL_GPL(qeth_core_hardsetup_card);
> diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
> index 23aaf37..5b67fd1 100644
> --- a/drivers/s390/net/qeth_l2_main.c
> +++ b/drivers/s390/net/qeth_l2_main.c
> @@ -146,11 +146,11 @@ static int qeth_l2_write_mac(struct qeth_card
> *card, u8 *mac)
> QETH_CARD_TEXT(card, 2, "L2Wmac");
> rc = qeth_l2_send_setdelmac(card, mac, cmd);
> if (rc == -EEXIST)
> - QETH_DBF_MESSAGE(2, "MAC %pM already registered on %s\n",
> - mac, QETH_CARD_IFNAME(card));
> + QETH_DBF_MESSAGE(2, "MAC already registered on device %x\n",
> + CARD_DEVID(card));
> else if (rc)
> - QETH_DBF_MESSAGE(2, "Failed to register MAC %pM on %s: %d\n",
> - mac, QETH_CARD_IFNAME(card), rc);
> + QETH_DBF_MESSAGE(2, "Failed to register MAC on device %x: %d\n",
> + CARD_DEVID(card), rc);
> return rc;
> }
>
> @@ -163,8 +163,8 @@ static int qeth_l2_remove_mac(struct qeth_card
> *card, u8 *mac)
> QETH_CARD_TEXT(card, 2, "L2Rmac");
> rc = qeth_l2_send_setdelmac(card, mac, cmd);
> if (rc)
> - QETH_DBF_MESSAGE(2, "Failed to delete MAC %pM on %s: %d\n",
> - mac, QETH_CARD_IFNAME(card), rc);
> + QETH_DBF_MESSAGE(2, "Failed to delete MAC on device %u: %d\n",
> + CARD_DEVID(card), rc);
> return rc;
> }
>
> @@ -260,9 +260,9 @@ static int qeth_l2_send_setdelvlan_cb(struct
> qeth_card *card,
>
> QETH_CARD_TEXT(card, 2, "L2sdvcb");
> if (cmd->hdr.return_code) {
> - QETH_DBF_MESSAGE(2, "Error in processing VLAN %i on
> %s: 0x%x.\n",
> + QETH_DBF_MESSAGE(2, "Error in processing VLAN %u on
> device %x: %#x.\n",
> cmd->data.setdelvlan.vlan_id,
> - QETH_CARD_IFNAME(card), cmd->hdr.return_code);
> + CARD_DEVID(card), cmd->hdr.return_code);
> QETH_CARD_TEXT_(card, 2, "L2VL%4x", cmd->hdr.command);
> QETH_CARD_TEXT_(card, 2, "err%d", cmd->hdr.return_code);
> }
> @@ -455,8 +455,8 @@ static int qeth_l2_request_initial_mac(struct
> qeth_card *card)
> rc = qeth_vm_request_mac(card);
> if (!rc)
> goto out;
> - QETH_DBF_MESSAGE(2, "z/VM MAC Service failed on device
> %s: x%x\n",
> - CARD_BUS_ID(card), rc);
> + QETH_DBF_MESSAGE(2, "z/VM MAC Service failed on device
> %x: %#x\n",
> + CARD_DEVID(card), rc);
> QETH_DBF_TEXT_(SETUP, 2, "err%04x", rc);
> /* fall back to alternative mechanism: */
> }
> @@ -468,8 +468,8 @@ static int qeth_l2_request_initial_mac(struct
> qeth_card *card)
> rc = qeth_setadpparms_change_macaddr(card);
> if (!rc)
> goto out;
> - QETH_DBF_MESSAGE(2, "READ_MAC Assist failed on device
> %s: x%x\n",
> - CARD_BUS_ID(card), rc);
> + QETH_DBF_MESSAGE(2, "READ_MAC Assist failed on device
> %x: %#x\n",
> + CARD_DEVID(card), rc);
> QETH_DBF_TEXT_(SETUP, 2, "1err%04x", rc);
> /* fall back once more: */
> }
> diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
> index 0b161cc..ffa2aa1 100644
> --- a/drivers/s390/net/qeth_l3_main.c
> +++ b/drivers/s390/net/qeth_l3_main.c
> @@ -494,9 +494,8 @@ int qeth_l3_setrouting_v4(struct qeth_card *card)
> QETH_PROT_IPV4);
> if (rc) {
> card->options.route4.type = NO_ROUTER;
> - QETH_DBF_MESSAGE(2, "Error (0x%04x) while setting routing type"
> - " on %s. Type set to 'no router'.\n", rc,
> - QETH_CARD_IFNAME(card));
> + QETH_DBF_MESSAGE(2, "Error (%#06x) while setting
> routing type on device %x. Type set to 'no router'.\n",
> + rc, CARD_DEVID(card));
> }
> return rc;
> }
> @@ -518,9 +517,8 @@ int qeth_l3_setrouting_v6(struct qeth_card *card)
> QETH_PROT_IPV6);
> if (rc) {
> card->options.route6.type = NO_ROUTER;
> - QETH_DBF_MESSAGE(2, "Error (0x%04x) while setting routing type"
> - " on %s. Type set to 'no router'.\n", rc,
> - QETH_CARD_IFNAME(card));
> + QETH_DBF_MESSAGE(2, "Error (%#06x) while setting
> routing type on device %x. Type set to 'no router'.\n",
> + rc, CARD_DEVID(card));
> }
> return rc;
> }
> @@ -1070,8 +1068,8 @@ qeth_diags_trace_cb(struct qeth_card *card,
> struct qeth_reply *reply,
> }
> break;
> default:
> - QETH_DBF_MESSAGE(2, "Unknown sniffer action (0x%04x) on %s\n",
> - cmd->data.diagass.action, QETH_CARD_IFNAME(card));
> + QETH_DBF_MESSAGE(2, "Unknown sniffer action (%#06x) on
> device %x\n",
> + cmd->data.diagass.action, CARD_DEVID(card));
> }
>
> return 0;
> @@ -1517,32 +1515,25 @@ static void qeth_l3_set_rx_mode(struct net_device *dev)
> qeth_l3_handle_promisc_mode(card);
> }
>
> -static const char *qeth_l3_arp_get_error_cause(int *rc)
> +static int qeth_l3_arp_makerc(int rc)
> {
> - switch (*rc) {
> - case QETH_IPA_ARP_RC_FAILED:
> - *rc = -EIO;
> - return "operation failed";
> + switch (rc) {
> + case IPA_RC_SUCCESS:
> + return 0;
> case QETH_IPA_ARP_RC_NOTSUPP:
> - *rc = -EOPNOTSUPP;
> - return "operation not supported";
> - case QETH_IPA_ARP_RC_OUT_OF_RANGE:
> - *rc = -EINVAL;
> - return "argument out of range";
> case QETH_IPA_ARP_RC_Q_NOTSUPP:
> - *rc = -EOPNOTSUPP;
> - return "query operation not supported";
> + return -EOPNOTSUPP;
> + case QETH_IPA_ARP_RC_OUT_OF_RANGE:
> + return -EINVAL;
> case QETH_IPA_ARP_RC_Q_NO_DATA:
> - *rc = -ENOENT;
> - return "no query data available";
> + return -ENOENT;
> default:
> - return "unknown error";
> + return -EIO;
> }
> }
>
> static int qeth_l3_arp_set_no_entries(struct qeth_card *card, int no_entries)
> {
> - int tmp;
> int rc;
>
> QETH_CARD_TEXT(card, 3, "arpstnoe");
> @@ -1560,13 +1551,10 @@ static int qeth_l3_arp_set_no_entries(struct
> qeth_card *card, int no_entries)
> rc = qeth_send_simple_setassparms(card, IPA_ARP_PROCESSING,
> IPA_CMD_ASS_ARP_SET_NO_ENTRIES,
> no_entries);
> - if (rc) {
> - tmp = rc;
> - QETH_DBF_MESSAGE(2, "Could not set number of ARP entries on "
> - "%s: %s (0x%x/%d)\n", QETH_CARD_IFNAME(card),
> - qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
> - }
> - return rc;
> + if (rc)
> + QETH_DBF_MESSAGE(2, "Could not set number of ARP
> entries on device %x: %#x\n",
> + CARD_DEVID(card), rc);
> + return qeth_l3_arp_makerc(rc);
> }
>
> static __u32 get_arp_entry_size(struct qeth_card *card,
> @@ -1716,7 +1704,6 @@ static int qeth_l3_query_arp_cache_info(struct
> qeth_card *card,
> {
> struct qeth_cmd_buffer *iob;
> struct qeth_ipa_cmd *cmd;
> - int tmp;
> int rc;
>
> QETH_CARD_TEXT_(card, 3, "qarpipv%i", prot);
> @@ -1735,15 +1722,10 @@ static int qeth_l3_query_arp_cache_info(struct
> qeth_card *card,
> rc = qeth_l3_send_ipa_arp_cmd(card, iob,
> QETH_SETASS_BASE_LEN+QETH_ARP_CMD_LEN,
> qeth_l3_arp_query_cb, (void *)qinfo);
> - if (rc) {
> - tmp = rc;
> - QETH_DBF_MESSAGE(2,
> - "Error while querying ARP cache on %s: %s "
> - "(0x%x/%d)\n", QETH_CARD_IFNAME(card),
> - qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
> - }
> -
> - return rc;
> + if (rc)
> + QETH_DBF_MESSAGE(2, "Error while querying ARP cache on
> device %x: %#x\n",
> + CARD_DEVID(card), rc);
> + return qeth_l3_arp_makerc(rc);
> }
>
> static int qeth_l3_arp_query(struct qeth_card *card, char __user *udata)
> @@ -1797,8 +1779,6 @@ static int qeth_l3_arp_add_entry(struct qeth_card *card,
> struct qeth_arp_cache_entry *entry)
> {
> struct qeth_cmd_buffer *iob;
> - char buf[16];
> - int tmp;
> int rc;
>
> QETH_CARD_TEXT(card, 3, "arpadent");
> @@ -1824,14 +1804,10 @@ static int qeth_l3_arp_add_entry(struct qeth_card *card,
> sizeof(struct qeth_arp_cache_entry),
> (unsigned long) entry,
> qeth_setassparms_cb, NULL);
> - if (rc) {
> - tmp = rc;
> - qeth_l3_ipaddr4_to_string((u8 *)entry->ipaddr, buf);
> - QETH_DBF_MESSAGE(2, "Could not add ARP entry for address %s "
> - "on %s: %s (0x%x/%d)\n", buf, QETH_CARD_IFNAME(card),
> - qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
> - }
> - return rc;
> + if (rc)
> + QETH_DBF_MESSAGE(2, "Could not add ARP entry on device
> %x: %#x\n",
> + CARD_DEVID(card), rc);
> + return qeth_l3_arp_makerc(rc);
> }
>
> static int qeth_l3_arp_remove_entry(struct qeth_card *card,
> @@ -1839,7 +1815,6 @@ static int qeth_l3_arp_remove_entry(struct
> qeth_card *card,
> {
> struct qeth_cmd_buffer *iob;
> char buf[16] = {0, };
> - int tmp;
> int rc;
>
> QETH_CARD_TEXT(card, 3, "arprment");
> @@ -1864,21 +1839,15 @@ static int qeth_l3_arp_remove_entry(struct
> qeth_card *card,
> rc = qeth_send_setassparms(card, iob,
> 12, (unsigned long)buf,
> qeth_setassparms_cb, NULL);
> - if (rc) {
> - tmp = rc;
> - memset(buf, 0, 16);
> - qeth_l3_ipaddr4_to_string((u8 *)entry->ipaddr, buf);
> - QETH_DBF_MESSAGE(2, "Could not delete ARP entry for address %s"
> - " on %s: %s (0x%x/%d)\n", buf, QETH_CARD_IFNAME(card),
> - qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
> - }
> - return rc;
> + if (rc)
> + QETH_DBF_MESSAGE(2, "Could not delete ARP entry on
> device %x: %#x\n",
> + CARD_DEVID(card), rc);
> + return qeth_l3_arp_makerc(rc);
> }
>
> static int qeth_l3_arp_flush_cache(struct qeth_card *card)
> {
> int rc;
> - int tmp;
>
> QETH_CARD_TEXT(card, 3, "arpflush");
>
> @@ -1894,13 +1863,10 @@ static int qeth_l3_arp_flush_cache(struct
> qeth_card *card)
> }
> rc = qeth_send_simple_setassparms(card, IPA_ARP_PROCESSING,
> IPA_CMD_ASS_ARP_FLUSH_CACHE, 0);
> - if (rc) {
> - tmp = rc;
> - QETH_DBF_MESSAGE(2, "Could not flush ARP cache on %s: %s "
> - "(0x%x/%d)\n", QETH_CARD_IFNAME(card),
> - qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
> - }
> - return rc;
> + if (rc)
> + QETH_DBF_MESSAGE(2, "Could not flush ARP cache on
> device %x: %#x\n",
> + CARD_DEVID(card), rc);
> + return qeth_l3_arp_makerc(rc);
> }
>
> static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
>
More information about the kernel-team
mailing list