lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 1 Feb 2022 20:51:25 -0800
From:   Jakub Kicinski <kuba@...nel.org>
To:     Joseph CHAMG <josright123@...il.com>
Cc:     "David S . Miller" <davem@...emloft.net>,
        Rob Herring <robh+dt@...nel.org>, joseph_chang@...icom.com.tw,
        netdev@...r.kernel.org, devicetree@...r.kernel.org,
        linux-kernel@...r.kernel.org, andy.shevchenko@...il.com,
        andrew@...n.ch, leon@...nel.org
Subject: Re: [PATCH v16, 2/2] net: Add dm9051 driver

On Sun, 30 Jan 2022 00:43:46 +0800 Joseph CHAMG wrote:
> +		rdptr = skb_put(skb, rxlen - 4);
> +		ret = regmap_noinc_read(db->regmap_dm, DM_SPI_MRCMD, rdptr, rxlen);
> +		if (ret) {

should be counted as rx_error

> +			dev_kfree_skb(skb);
> +			return ret;
> +		}
> +
> +		ret = regmap_write(db->regmap_dm, DM9051_ISR, 0xff); /* to stop mrcmd */
> +		if (ret)
> +			return ret;

leaks skb, also should be counted as rx_error

> +		skb->protocol = eth_type_trans(skb, db->ndev);
> +		if (db->ndev->features & NETIF_F_RXCSUM)
> +			skb_checksum_none_assert(skb);
> +		netif_rx_ni(skb);
> +		db->ndev->stats.rx_bytes += rxlen;
> +		db->ndev->stats.rx_packets++;
> +		scanrr++;
> +	} while (!ret);
> +
> +	return scanrr;
> +}
> +
> +/* transmit a packet,
> + * return value,
> + *   0 - succeed
> + *  -ETIMEDOUT - timeout error
> + */
> +static int dm9051_single_tx(struct board_info *db, u8 *buff, unsigned int len)
> +{
> +	int ret;
> +
> +	ret = dm9051_map_xmitpoll(db);
> +	if (ret)
> +		return ret;
> +
> +	ret = regmap_noinc_write(db->regmap_dm, DM_SPI_MWCMD, buff, len);
> +	if (ret)
> +		return ret;
> +
> +	ret = regmap_bulk_write(db->regmap_dmbulk, DM9051_TXPLL, &len, 2);
> +	if (ret < 0)
> +		return ret;
> +
> +	return regmap_write(db->regmap_dm, DM9051_TCR, TCR_TXREQ);
> +}
> +
> +static int dm9051_loop_tx(struct board_info *db)
> +{
> +	struct net_device *ndev = db->ndev;
> +	int ntx = 0;
> +	int ret;
> +
> +	while (!skb_queue_empty(&db->txq)) {
> +		struct sk_buff *skb;
> +
> +		skb = skb_dequeue(&db->txq);
> +		if (skb) {
> +			ntx++;
> +			ret = dm9051_single_tx(db, skb->data, skb->len);
> +			dev_kfree_skb(skb);
> +			if (ret < 0)
> +				return 0;

Should be counted as tx error?

> +			ndev->stats.tx_bytes += skb->len;
> +			ndev->stats.tx_packets++;
> +		}
> +
> +		if (netif_queue_stopped(ndev) &&
> +		    (skb_queue_len(&db->txq) < DM9051_TX_QUE_LO_WATER))
> +			netif_wake_queue(ndev);
> +	}
> +
> +	return ntx;

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ