From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [android-goldfish:android-3.18 349/362] drivers/staging/wlan-ng/p80211netdev.c:235:41: sparse: sparse: cast to restricted __le16
Date: Wed, 26 May 2021 04:11:35 +0800 [thread overview]
Message-ID: <202105260432.5fpFS3yb-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 9094 bytes --]
tree: https://android.googlesource.com/kernel/goldfish android-3.18
head: 145dffbee46bf9294a60c79e32c2397b27a6853e
commit: a6cb2a3ff14ca4b576a826eddd79006fcfc9f1b2 [349/362] staging: wlan-ng: add missing byte order conversion
config: x86_64-randconfig-s021-20210525 (attached as .config)
compiler: gcc-5 (Ubuntu 5.5.0-12ubuntu1) 5.5.0 20171010
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
git remote add android-goldfish https://android.googlesource.com/kernel/goldfish
git fetch --no-tags android-goldfish android-3.18
git checkout a6cb2a3ff14ca4b576a826eddd79006fcfc9f1b2
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
drivers/staging/wlan-ng/p80211netdev.c:361:24: sparse: sparse: restricted __be16 degrades to integer
drivers/staging/wlan-ng/p80211netdev.c:372:16: sparse: sparse: restricted __be16 degrades to integer
>> drivers/staging/wlan-ng/p80211netdev.c:235:41: sparse: sparse: cast to restricted __le16
arch/x86/include/asm/bitops.h: Assembler messages:
arch/x86/include/asm/bitops.h:206: Warning: no instruction mnemonic suffix given and no register operands; using default for `bts'
vim +235 drivers/staging/wlan-ng/p80211netdev.c
220
221 /**
222 * p80211_convert_to_ether - conversion from 802.11 frame to ethernet frame
223 * @wlandev: pointer to WLAN device
224 * @skb: pointer to socket buffer
225 *
226 * Returns: 0 if conversion succeeded
227 * CONV_TO_ETHER_FAILED if conversion failed
228 * CONV_TO_ETHER_SKIPPED if frame is ignored
229 */
230 static int p80211_convert_to_ether(wlandevice_t *wlandev, struct sk_buff *skb)
231 {
232 struct p80211_hdr_a3 *hdr;
233
234 hdr = (struct p80211_hdr_a3 *) skb->data;
> 235 if (p80211_rx_typedrop(wlandev, le16_to_cpu(hdr->fc)))
236 return CONV_TO_ETHER_SKIPPED;
237
238 /* perform mcast filtering: allow my local address through but reject
239 * anything else that isn't multicast
240 */
241 if (wlandev->netdev->flags & IFF_ALLMULTI) {
242 if (!ether_addr_equal_unaligned(wlandev->netdev->dev_addr,
243 hdr->a1)) {
244 if (!is_multicast_ether_addr(hdr->a1))
245 return CONV_TO_ETHER_SKIPPED;
246 }
247 }
248
249 if (skb_p80211_to_ether(wlandev, wlandev->ethconv, skb) == 0) {
250 skb->dev->last_rx = jiffies;
251 wlandev->netdev->stats.rx_packets++;
252 wlandev->netdev->stats.rx_bytes += skb->len;
253 netif_rx_ni(skb);
254 return 0;
255 }
256
257 netdev_dbg(wlandev->netdev, "p80211_convert_to_ether failed.\n");
258 return CONV_TO_ETHER_FAILED;
259 }
260
261 /**
262 * p80211netdev_rx_bh - deferred processing of all received frames
263 *
264 * @arg: pointer to WLAN network device structure (cast to unsigned long)
265 */
266 static void p80211netdev_rx_bh(unsigned long arg)
267 {
268 wlandevice_t *wlandev = (wlandevice_t *) arg;
269 struct sk_buff *skb = NULL;
270 netdevice_t *dev = wlandev->netdev;
271
272 /* Let's empty our our queue */
273 while ((skb = skb_dequeue(&wlandev->nsd_rxq))) {
274 if (wlandev->state == WLAN_DEVICE_OPEN) {
275
276 if (dev->type != ARPHRD_ETHER) {
277 /* RAW frame; we shouldn't convert it */
278 /* XXX Append the Prism Header here instead. */
279
280 /* set up various data fields */
281 skb->dev = dev;
282 skb_reset_mac_header(skb);
283 skb->ip_summed = CHECKSUM_NONE;
284 skb->pkt_type = PACKET_OTHERHOST;
285 skb->protocol = htons(ETH_P_80211_RAW);
286 dev->last_rx = jiffies;
287
288 dev->stats.rx_packets++;
289 dev->stats.rx_bytes += skb->len;
290 netif_rx_ni(skb);
291 continue;
292 } else {
293 if (!p80211_convert_to_ether(wlandev, skb))
294 continue;
295 }
296 }
297 dev_kfree_skb(skb);
298 }
299 }
300
301 /*----------------------------------------------------------------
302 * p80211knetdev_hard_start_xmit
303 *
304 * Linux netdevice method for transmitting a frame.
305 *
306 * Arguments:
307 * skb Linux sk_buff containing the frame.
308 * netdev Linux netdevice.
309 *
310 * Side effects:
311 * If the lower layers report that buffers are full. netdev->tbusy
312 * will be set to prevent higher layers from sending more traffic.
313 *
314 * Note: If this function returns non-zero, higher layers retain
315 * ownership of the skb.
316 *
317 * Returns:
318 * zero on success, non-zero on failure.
319 ----------------------------------------------------------------*/
320 static int p80211knetdev_hard_start_xmit(struct sk_buff *skb,
321 netdevice_t *netdev)
322 {
323 int result = 0;
324 int txresult = -1;
325 wlandevice_t *wlandev = netdev->ml_priv;
326 union p80211_hdr p80211_hdr;
327 struct p80211_metawep p80211_wep;
328
329 p80211_wep.data = NULL;
330
331 if (skb == NULL)
332 return NETDEV_TX_OK;
333
334 if (wlandev->state != WLAN_DEVICE_OPEN) {
335 result = 1;
336 goto failed;
337 }
338
339 memset(&p80211_hdr, 0, sizeof(union p80211_hdr));
340 memset(&p80211_wep, 0, sizeof(struct p80211_metawep));
341
342 if (netif_queue_stopped(netdev)) {
343 netdev_dbg(netdev, "called when queue stopped.\n");
344 result = 1;
345 goto failed;
346 }
347
348 netif_stop_queue(netdev);
349
350 /* Check to see that a valid mode is set */
351 switch (wlandev->macmode) {
352 case WLAN_MACMODE_IBSS_STA:
353 case WLAN_MACMODE_ESS_STA:
354 case WLAN_MACMODE_ESS_AP:
355 break;
356 default:
357 /* Mode isn't set yet, just drop the frame
358 * and return success .
359 * TODO: we need a saner way to handle this
360 */
> 361 if (skb->protocol != ETH_P_80211_RAW) {
362 netif_start_queue(wlandev->netdev);
363 netdev_notice(netdev, "Tx attempt prior to association, frame dropped.\n");
364 netdev->stats.tx_dropped++;
365 result = 0;
366 goto failed;
367 }
368 break;
369 }
370
371 /* Check for raw transmits */
372 if (skb->protocol == ETH_P_80211_RAW) {
373 if (!capable(CAP_NET_ADMIN)) {
374 result = 1;
375 goto failed;
376 }
377 /* move the header over */
378 memcpy(&p80211_hdr, skb->data, sizeof(union p80211_hdr));
379 skb_pull(skb, sizeof(union p80211_hdr));
380 } else {
381 if (skb_ether_to_p80211
382 (wlandev, wlandev->ethconv, skb, &p80211_hdr,
383 &p80211_wep) != 0) {
384 /* convert failed */
385 netdev_dbg(netdev, "ether_to_80211(%d) failed.\n",
386 wlandev->ethconv);
387 result = 1;
388 goto failed;
389 }
390 }
391 if (wlandev->txframe == NULL) {
392 result = 1;
393 goto failed;
394 }
395
396 netdev->trans_start = jiffies;
397
398 netdev->stats.tx_packets++;
399 /* count only the packet payload */
400 netdev->stats.tx_bytes += skb->len;
401
402 txresult = wlandev->txframe(wlandev, skb, &p80211_hdr, &p80211_wep);
403
404 if (txresult == 0) {
405 /* success and more buf */
406 /* avail, re: hw_txdata */
407 netif_wake_queue(wlandev->netdev);
408 result = NETDEV_TX_OK;
409 } else if (txresult == 1) {
410 /* success, no more avail */
411 netdev_dbg(netdev, "txframe success, no more bufs\n");
412 /* netdev->tbusy = 1; don't set here, irqhdlr */
413 /* may have already cleared it */
414 result = NETDEV_TX_OK;
415 } else if (txresult == 2) {
416 /* alloc failure, drop frame */
417 netdev_dbg(netdev, "txframe returned alloc_fail\n");
418 result = NETDEV_TX_BUSY;
419 } else {
420 /* buffer full or queue busy, drop frame. */
421 netdev_dbg(netdev, "txframe returned full or busy\n");
422 result = NETDEV_TX_BUSY;
423 }
424
425 failed:
426 /* Free up the WEP buffer if it's not the same as the skb */
427 if ((p80211_wep.data) && (p80211_wep.data != skb->data))
428 kzfree(p80211_wep.data);
429
430 /* we always free the skb here, never in a lower level. */
431 if (!result)
432 dev_kfree_skb(skb);
433
434 return result;
435 }
436
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 28704 bytes --]
next reply other threads:[~2021-05-25 20:11 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-25 20:11 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2021-07-02 19:16 [android-goldfish:android-3.18 349/362] drivers/staging/wlan-ng/p80211netdev.c:235:41: sparse: sparse: cast to restricted __le16 kernel test robot
2021-03-27 16:19 kernel test robot
2020-12-30 16:19 kernel test robot
2020-11-15 20:08 kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202105260432.5fpFS3yb-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.