Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless

Conflicts:
drivers/net/wireless/mwifiex/cfg80211.c

+216 -129
+82 -82
drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
··· 534 534 535 535 static const u32 ar9300Modes_high_power_tx_gain_table_2p2[][5] = { 536 536 /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ 537 - {0x0000a2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352}, 538 - {0x0000a2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584}, 539 - {0x0000a2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800}, 537 + {0x0000a2dc, 0x00033800, 0x00033800, 0x03aaa352, 0x03aaa352}, 538 + {0x0000a2e0, 0x0003c000, 0x0003c000, 0x03ccc584, 0x03ccc584}, 539 + {0x0000a2e4, 0x03fc0000, 0x03fc0000, 0x03f0f800, 0x03f0f800}, 540 540 {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000}, 541 541 {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, 542 542 {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 543 543 {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002}, 544 544 {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004}, 545 545 {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200}, 546 - {0x0000a510, 0x15000028, 0x15000028, 0x0f000202, 0x0f000202}, 547 - {0x0000a514, 0x1b00002b, 0x1b00002b, 0x12000400, 0x12000400}, 548 - {0x0000a518, 0x1f020028, 0x1f020028, 0x16000402, 0x16000402}, 549 - {0x0000a51c, 0x2502002b, 0x2502002b, 0x19000404, 0x19000404}, 550 - {0x0000a520, 0x2a04002a, 0x2a04002a, 0x1c000603, 0x1c000603}, 551 - {0x0000a524, 0x2e06002a, 0x2e06002a, 0x21000a02, 0x21000a02}, 552 - {0x0000a528, 0x3302202d, 0x3302202d, 0x25000a04, 0x25000a04}, 553 - {0x0000a52c, 0x3804202c, 0x3804202c, 0x28000a20, 0x28000a20}, 554 - {0x0000a530, 0x3c06202c, 0x3c06202c, 0x2c000e20, 0x2c000e20}, 555 - {0x0000a534, 0x4108202d, 0x4108202d, 0x30000e22, 0x30000e22}, 556 - {0x0000a538, 0x4506402d, 0x4506402d, 0x34000e24, 0x34000e24}, 557 - {0x0000a53c, 0x4906222d, 0x4906222d, 0x38001640, 0x38001640}, 558 - {0x0000a540, 0x4d062231, 0x4d062231, 0x3c001660, 0x3c001660}, 559 - {0x0000a544, 0x50082231, 0x50082231, 0x3f001861, 0x3f001861}, 560 - {0x0000a548, 0x5608422e, 0x5608422e, 0x43001a81, 0x43001a81}, 561 - {0x0000a54c, 0x5a08442e, 0x5a08442e, 0x47001a83, 0x47001a83}, 562 - {0x0000a550, 0x5e0a4431, 0x5e0a4431, 0x4a001c84, 0x4a001c84}, 563 - {0x0000a554, 0x640a4432, 0x640a4432, 0x4e001ce3, 0x4e001ce3}, 564 - {0x0000a558, 0x680a4434, 0x680a4434, 0x52001ce5, 0x52001ce5}, 565 - {0x0000a55c, 0x6c0a6434, 0x6c0a6434, 0x56001ce9, 0x56001ce9}, 566 - {0x0000a560, 0x6f0a6633, 0x6f0a6633, 0x5a001ceb, 0x5a001ceb}, 567 - {0x0000a564, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, 568 - {0x0000a568, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, 569 - {0x0000a56c, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, 570 - {0x0000a570, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, 571 - {0x0000a574, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, 572 - {0x0000a578, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, 573 - {0x0000a57c, 0x730c6634, 0x730c6634, 0x5d001eec, 0x5d001eec}, 546 + {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202}, 547 + {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400}, 548 + {0x0000a518, 0x21002220, 0x21002220, 0x16000402, 0x16000402}, 549 + {0x0000a51c, 0x27002223, 0x27002223, 0x19000404, 0x19000404}, 550 + {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603}, 551 + {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02}, 552 + {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04}, 553 + {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20}, 554 + {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20}, 555 + {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22}, 556 + {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24}, 557 + {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640}, 558 + {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660}, 559 + {0x0000a544, 0x52022470, 0x52022470, 0x3f001861, 0x3f001861}, 560 + {0x0000a548, 0x55022490, 0x55022490, 0x43001a81, 0x43001a81}, 561 + {0x0000a54c, 0x59022492, 0x59022492, 0x47001a83, 0x47001a83}, 562 + {0x0000a550, 0x5d022692, 0x5d022692, 0x4a001c84, 0x4a001c84}, 563 + {0x0000a554, 0x61022892, 0x61022892, 0x4e001ce3, 0x4e001ce3}, 564 + {0x0000a558, 0x65024890, 0x65024890, 0x52001ce5, 0x52001ce5}, 565 + {0x0000a55c, 0x69024892, 0x69024892, 0x56001ce9, 0x56001ce9}, 566 + {0x0000a560, 0x6e024c92, 0x6e024c92, 0x5a001ceb, 0x5a001ceb}, 567 + {0x0000a564, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, 568 + {0x0000a568, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, 569 + {0x0000a56c, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, 570 + {0x0000a570, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, 571 + {0x0000a574, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, 572 + {0x0000a578, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, 573 + {0x0000a57c, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec}, 574 574 {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, 575 575 {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002}, 576 576 {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004}, 577 577 {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200}, 578 - {0x0000a590, 0x15800028, 0x15800028, 0x0f800202, 0x0f800202}, 579 - {0x0000a594, 0x1b80002b, 0x1b80002b, 0x12800400, 0x12800400}, 580 - {0x0000a598, 0x1f820028, 0x1f820028, 0x16800402, 0x16800402}, 581 - {0x0000a59c, 0x2582002b, 0x2582002b, 0x19800404, 0x19800404}, 582 - {0x0000a5a0, 0x2a84002a, 0x2a84002a, 0x1c800603, 0x1c800603}, 583 - {0x0000a5a4, 0x2e86002a, 0x2e86002a, 0x21800a02, 0x21800a02}, 584 - {0x0000a5a8, 0x3382202d, 0x3382202d, 0x25800a04, 0x25800a04}, 585 - {0x0000a5ac, 0x3884202c, 0x3884202c, 0x28800a20, 0x28800a20}, 586 - {0x0000a5b0, 0x3c86202c, 0x3c86202c, 0x2c800e20, 0x2c800e20}, 587 - {0x0000a5b4, 0x4188202d, 0x4188202d, 0x30800e22, 0x30800e22}, 588 - {0x0000a5b8, 0x4586402d, 0x4586402d, 0x34800e24, 0x34800e24}, 589 - {0x0000a5bc, 0x4986222d, 0x4986222d, 0x38801640, 0x38801640}, 590 - {0x0000a5c0, 0x4d862231, 0x4d862231, 0x3c801660, 0x3c801660}, 591 - {0x0000a5c4, 0x50882231, 0x50882231, 0x3f801861, 0x3f801861}, 592 - {0x0000a5c8, 0x5688422e, 0x5688422e, 0x43801a81, 0x43801a81}, 593 - {0x0000a5cc, 0x5a88442e, 0x5a88442e, 0x47801a83, 0x47801a83}, 594 - {0x0000a5d0, 0x5e8a4431, 0x5e8a4431, 0x4a801c84, 0x4a801c84}, 595 - {0x0000a5d4, 0x648a4432, 0x648a4432, 0x4e801ce3, 0x4e801ce3}, 596 - {0x0000a5d8, 0x688a4434, 0x688a4434, 0x52801ce5, 0x52801ce5}, 597 - {0x0000a5dc, 0x6c8a6434, 0x6c8a6434, 0x56801ce9, 0x56801ce9}, 598 - {0x0000a5e0, 0x6f8a6633, 0x6f8a6633, 0x5a801ceb, 0x5a801ceb}, 599 - {0x0000a5e4, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, 600 - {0x0000a5e8, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, 601 - {0x0000a5ec, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, 602 - {0x0000a5f0, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, 603 - {0x0000a5f4, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, 604 - {0x0000a5f8, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, 605 - {0x0000a5fc, 0x738c6634, 0x738c6634, 0x5d801eec, 0x5d801eec}, 578 + {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202}, 579 + {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400}, 580 + {0x0000a598, 0x21802220, 0x21802220, 0x16800402, 0x16800402}, 581 + {0x0000a59c, 0x27802223, 0x27802223, 0x19800404, 0x19800404}, 582 + {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603}, 583 + {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02}, 584 + {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04}, 585 + {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20}, 586 + {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20}, 587 + {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22}, 588 + {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24}, 589 + {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640}, 590 + {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660}, 591 + {0x0000a5c4, 0x52822470, 0x52822470, 0x3f801861, 0x3f801861}, 592 + {0x0000a5c8, 0x55822490, 0x55822490, 0x43801a81, 0x43801a81}, 593 + {0x0000a5cc, 0x59822492, 0x59822492, 0x47801a83, 0x47801a83}, 594 + {0x0000a5d0, 0x5d822692, 0x5d822692, 0x4a801c84, 0x4a801c84}, 595 + {0x0000a5d4, 0x61822892, 0x61822892, 0x4e801ce3, 0x4e801ce3}, 596 + {0x0000a5d8, 0x65824890, 0x65824890, 0x52801ce5, 0x52801ce5}, 597 + {0x0000a5dc, 0x69824892, 0x69824892, 0x56801ce9, 0x56801ce9}, 598 + {0x0000a5e0, 0x6e824c92, 0x6e824c92, 0x5a801ceb, 0x5a801ceb}, 599 + {0x0000a5e4, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, 600 + {0x0000a5e8, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, 601 + {0x0000a5ec, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, 602 + {0x0000a5f0, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, 603 + {0x0000a5f4, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, 604 + {0x0000a5f8, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, 605 + {0x0000a5fc, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec}, 606 606 {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 607 607 {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 608 - {0x0000a608, 0x01804601, 0x01804601, 0x00000000, 0x00000000}, 609 - {0x0000a60c, 0x01804601, 0x01804601, 0x00000000, 0x00000000}, 610 - {0x0000a610, 0x01804601, 0x01804601, 0x00000000, 0x00000000}, 611 - {0x0000a614, 0x01804601, 0x01804601, 0x01404000, 0x01404000}, 612 - {0x0000a618, 0x01804601, 0x01804601, 0x01404501, 0x01404501}, 613 - {0x0000a61c, 0x01804601, 0x01804601, 0x02008501, 0x02008501}, 614 - {0x0000a620, 0x03408d02, 0x03408d02, 0x0280ca03, 0x0280ca03}, 615 - {0x0000a624, 0x0300cc03, 0x0300cc03, 0x03010c04, 0x03010c04}, 616 - {0x0000a628, 0x03410d04, 0x03410d04, 0x04014c04, 0x04014c04}, 617 - {0x0000a62c, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, 618 - {0x0000a630, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, 619 - {0x0000a634, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, 620 - {0x0000a638, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, 621 - {0x0000a63c, 0x03410d04, 0x03410d04, 0x04015005, 0x04015005}, 622 - {0x0000b2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352}, 623 - {0x0000b2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584}, 624 - {0x0000b2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800}, 608 + {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 609 + {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 610 + {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 611 + {0x0000a614, 0x02004000, 0x02004000, 0x01404000, 0x01404000}, 612 + {0x0000a618, 0x02004801, 0x02004801, 0x01404501, 0x01404501}, 613 + {0x0000a61c, 0x02808a02, 0x02808a02, 0x02008501, 0x02008501}, 614 + {0x0000a620, 0x0380ce03, 0x0380ce03, 0x0280ca03, 0x0280ca03}, 615 + {0x0000a624, 0x04411104, 0x04411104, 0x03010c04, 0x03010c04}, 616 + {0x0000a628, 0x04411104, 0x04411104, 0x04014c04, 0x04014c04}, 617 + {0x0000a62c, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, 618 + {0x0000a630, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, 619 + {0x0000a634, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, 620 + {0x0000a638, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, 621 + {0x0000a63c, 0x04411104, 0x04411104, 0x04015005, 0x04015005}, 622 + {0x0000b2dc, 0x00033800, 0x00033800, 0x03aaa352, 0x03aaa352}, 623 + {0x0000b2e0, 0x0003c000, 0x0003c000, 0x03ccc584, 0x03ccc584}, 624 + {0x0000b2e4, 0x03fc0000, 0x03fc0000, 0x03f0f800, 0x03f0f800}, 625 625 {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000}, 626 - {0x0000c2dc, 0x000cfff0, 0x000cfff0, 0x03aaa352, 0x03aaa352}, 627 - {0x0000c2e0, 0x000f0000, 0x000f0000, 0x03ccc584, 0x03ccc584}, 628 - {0x0000c2e4, 0x03f00000, 0x03f00000, 0x03f0f800, 0x03f0f800}, 626 + {0x0000c2dc, 0x00033800, 0x00033800, 0x03aaa352, 0x03aaa352}, 627 + {0x0000c2e0, 0x0003c000, 0x0003c000, 0x03ccc584, 0x03ccc584}, 628 + {0x0000c2e4, 0x03fc0000, 0x03fc0000, 0x03f0f800, 0x03f0f800}, 629 629 {0x0000c2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000}, 630 630 {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, 631 - {0x00016048, 0x61200001, 0x61200001, 0x66480001, 0x66480001}, 631 + {0x00016048, 0x66480001, 0x66480001, 0x66480001, 0x66480001}, 632 632 {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, 633 633 {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, 634 - {0x00016448, 0x61200001, 0x61200001, 0x66480001, 0x66480001}, 634 + {0x00016448, 0x66480001, 0x66480001, 0x66480001, 0x66480001}, 635 635 {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, 636 636 {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, 637 - {0x00016848, 0x61200001, 0x61200001, 0x66480001, 0x66480001}, 637 + {0x00016848, 0x66480001, 0x66480001, 0x66480001, 0x66480001}, 638 638 {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, 639 639 }; 640 640
+1
drivers/net/wireless/ath/ath9k/hif_usb.c
··· 38 38 { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */ 39 39 { USB_DEVICE(0x040D, 0x3801) }, /* VIA */ 40 40 { USB_DEVICE(0x0cf3, 0xb003) }, /* Ubiquiti WifiStation Ext */ 41 + { USB_DEVICE(0x0cf3, 0xb002) }, /* Ubiquiti WifiStation */ 41 42 { USB_DEVICE(0x057c, 0x8403) }, /* AVM FRITZ!WLAN 11N v2 USB */ 42 43 43 44 { USB_DEVICE(0x0cf3, 0x7015),
+2
drivers/net/wireless/ath/ath9k/xmit.c
··· 312 312 } 313 313 314 314 bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list); 315 + bf->bf_next = NULL; 315 316 list_del(&bf->list); 316 317 317 318 spin_unlock_bh(&sc->tx.txbuflock); ··· 1775 1774 list_add_tail(&bf->list, &bf_head); 1776 1775 bf->bf_state.bf_type = 0; 1777 1776 1777 + bf->bf_next = NULL; 1778 1778 bf->bf_lastbf = bf; 1779 1779 ath_tx_fill_desc(sc, bf, txq, fi->framelen); 1780 1780 ath_tx_txqaddbuf(sc, txq, &bf_head, false);
+4
drivers/net/wireless/b43/main.c
··· 5404 5404 cancel_work_sync(&wldev->restart_work); 5405 5405 5406 5406 B43_WARN_ON(!wl); 5407 + if (!wldev->fw.ucode.data) 5408 + return; /* NULL if firmware never loaded */ 5407 5409 if (wl->current_dev == wldev && wl->hw_registred) { 5408 5410 b43_leds_stop(wldev); 5409 5411 ieee80211_unregister_hw(wl->hw); ··· 5480 5478 cancel_work_sync(&wldev->restart_work); 5481 5479 5482 5480 B43_WARN_ON(!wl); 5481 + if (!wldev->fw.ucode.data) 5482 + return; /* NULL if firmware never loaded */ 5483 5483 if (wl->current_dev == wldev && wl->hw_registred) { 5484 5484 b43_leds_stop(wldev); 5485 5485 ieee80211_unregister_hw(wl->hw);
+1 -1
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
··· 3366 3366 3367 3367 if (!request || !request->n_ssids || !request->n_match_sets) { 3368 3368 WL_ERR("Invalid sched scan req!! n_ssids:%d\n", 3369 - request->n_ssids); 3369 + request ? request->n_ssids : 0); 3370 3370 return -EINVAL; 3371 3371 } 3372 3372
+5 -2
drivers/net/wireless/mwifiex/cfg80211.c
··· 1826 1826 return -EBUSY; 1827 1827 } 1828 1828 1829 - priv->scan_request = request; 1830 - 1831 1829 if (priv->user_scan_cfg) { 1832 1830 dev_err(priv->adapter->dev, "cmd: Scan already in process..\n"); 1833 1831 return -EBUSY; ··· 1837 1839 dev_err(priv->adapter->dev, "failed to alloc scan_req\n"); 1838 1840 return -ENOMEM; 1839 1841 } 1842 + 1843 + priv->scan_request = request; 1840 1844 1841 1845 priv->user_scan_cfg->num_ssids = request->n_ssids; 1842 1846 priv->user_scan_cfg->ssid_list = request->ssids; ··· 1876 1876 ret = mwifiex_scan_networks(priv, priv->user_scan_cfg); 1877 1877 if (ret) { 1878 1878 dev_err(priv->adapter->dev, "scan failed: %d\n", ret); 1879 + priv->scan_request = NULL; 1880 + kfree(priv->user_scan_cfg); 1881 + priv->user_scan_cfg = NULL; 1879 1882 return ret; 1880 1883 } 1881 1884
+5 -8
drivers/net/wireless/mwifiex/scan.c
··· 1864 1864 struct cfg80211_ssid *req_ssid) 1865 1865 { 1866 1866 struct mwifiex_adapter *adapter = priv->adapter; 1867 - int ret = 0; 1867 + int ret; 1868 1868 struct mwifiex_user_scan_cfg *scan_cfg; 1869 1869 1870 - if (!req_ssid) 1871 - return -1; 1872 - 1873 1870 if (adapter->scan_processing) { 1874 - dev_dbg(adapter->dev, "cmd: Scan already in process...\n"); 1875 - return ret; 1871 + dev_err(adapter->dev, "cmd: Scan already in process...\n"); 1872 + return -EBUSY; 1876 1873 } 1877 1874 1878 1875 if (priv->scan_block) { 1879 - dev_dbg(adapter->dev, 1876 + dev_err(adapter->dev, 1880 1877 "cmd: Scan is blocked during association...\n"); 1881 - return ret; 1878 + return -EBUSY; 1882 1879 } 1883 1880 1884 1881 scan_cfg = kzalloc(sizeof(struct mwifiex_user_scan_cfg), GFP_KERNEL);
+1
drivers/net/wireless/rt2x00/rt2500usb.c
··· 1988 1988 .disconnect = rt2x00usb_disconnect, 1989 1989 .suspend = rt2x00usb_suspend, 1990 1990 .resume = rt2x00usb_resume, 1991 + .reset_resume = rt2x00usb_resume, 1991 1992 .disable_hub_initiated_lpm = 1, 1992 1993 }; 1993 1994
+1
drivers/net/wireless/rt2x00/rt2800usb.c
··· 1282 1282 .disconnect = rt2x00usb_disconnect, 1283 1283 .suspend = rt2x00usb_suspend, 1284 1284 .resume = rt2x00usb_resume, 1285 + .reset_resume = rt2x00usb_resume, 1285 1286 .disable_hub_initiated_lpm = 1, 1286 1287 }; 1287 1288
+1
drivers/net/wireless/rt2x00/rt73usb.c
··· 2535 2535 .disconnect = rt2x00usb_disconnect, 2536 2536 .suspend = rt2x00usb_suspend, 2537 2537 .resume = rt2x00usb_resume, 2538 + .reset_resume = rt2x00usb_resume, 2538 2539 .disable_hub_initiated_lpm = 1, 2539 2540 }; 2540 2541
+1 -1
drivers/net/wireless/rtlwifi/usb.c
··· 673 673 set_hal_start(rtlhal); 674 674 675 675 /* Start bulk IN */ 676 - _rtl_usb_receive(hw); 676 + err = _rtl_usb_receive(hw); 677 677 } 678 678 679 679 return err;
+9
include/net/cfg80211.h
··· 2666 2666 unsigned int __attribute_const__ ieee80211_hdrlen(__le16 fc); 2667 2667 2668 2668 /** 2669 + * ieee80211_get_mesh_hdrlen - get mesh extension header length 2670 + * @meshhdr: the mesh extension header, only the flags field 2671 + * (first byte) will be accessed 2672 + * Returns the length of the extension header, which is always at 2673 + * least 6 bytes and at most 18 if address 5 and 6 are present. 2674 + */ 2675 + unsigned int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr); 2676 + 2677 + /** 2669 2678 * DOC: Data path helpers 2670 2679 * 2671 2680 * In addition to generic utilities, cfg80211 also offers
+1 -1
net/mac80211/ibss.c
··· 1110 1110 sdata->u.ibss.state = IEEE80211_IBSS_MLME_SEARCH; 1111 1111 sdata->u.ibss.ibss_join_req = jiffies; 1112 1112 1113 - memcpy(sdata->u.ibss.ssid, params->ssid, IEEE80211_MAX_SSID_LEN); 1113 + memcpy(sdata->u.ibss.ssid, params->ssid, params->ssid_len); 1114 1114 sdata->u.ibss.ssid_len = params->ssid_len; 1115 1115 1116 1116 mutex_unlock(&sdata->u.ibss.mtx);
+55 -17
net/mac80211/rx.c
··· 531 531 532 532 if (ieee80211_is_action(hdr->frame_control)) { 533 533 u8 category; 534 + 535 + /* make sure category field is present */ 536 + if (rx->skb->len < IEEE80211_MIN_ACTION_SIZE) 537 + return RX_DROP_MONITOR; 538 + 534 539 mgmt = (struct ieee80211_mgmt *)hdr; 535 540 category = mgmt->u.action.category; 536 541 if (category != WLAN_CATEGORY_MESH_ACTION && ··· 888 883 */ 889 884 if (rx->sta && rx->sdata->vif.type == NL80211_IFTYPE_STATION && 890 885 ieee80211_is_data_present(hdr->frame_control)) { 891 - u16 ethertype; 892 - u8 *payload; 886 + unsigned int hdrlen; 887 + __be16 ethertype; 893 888 894 - payload = rx->skb->data + 895 - ieee80211_hdrlen(hdr->frame_control); 896 - ethertype = (payload[6] << 8) | payload[7]; 897 - if (cpu_to_be16(ethertype) == 898 - rx->sdata->control_port_protocol) 889 + hdrlen = ieee80211_hdrlen(hdr->frame_control); 890 + 891 + if (rx->skb->len < hdrlen + 8) 892 + return RX_DROP_MONITOR; 893 + 894 + skb_copy_bits(rx->skb, hdrlen + 6, &ethertype, 2); 895 + if (ethertype == rx->sdata->control_port_protocol) 899 896 return RX_CONTINUE; 900 897 } 901 898 ··· 1474 1467 1475 1468 hdr = (struct ieee80211_hdr *)rx->skb->data; 1476 1469 fc = hdr->frame_control; 1470 + 1471 + if (ieee80211_is_ctl(fc)) 1472 + return RX_CONTINUE; 1473 + 1477 1474 sc = le16_to_cpu(hdr->seq_ctrl); 1478 1475 frag = sc & IEEE80211_SCTL_FRAG; 1479 1476 1480 1477 if (likely((!ieee80211_has_morefrags(fc) && frag == 0) || 1481 - (rx->skb)->len < 24 || 1482 1478 is_multicast_ether_addr(hdr->addr1))) { 1483 1479 /* not fragmented */ 1484 1480 goto out; ··· 1904 1894 1905 1895 hdr = (struct ieee80211_hdr *) skb->data; 1906 1896 hdrlen = ieee80211_hdrlen(hdr->frame_control); 1897 + 1898 + /* make sure fixed part of mesh header is there, also checks skb len */ 1899 + if (!pskb_may_pull(rx->skb, hdrlen + 6)) 1900 + return RX_DROP_MONITOR; 1901 + 1902 + mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen); 1903 + 1904 + /* make sure full mesh header is there, also checks skb len */ 1905 + if (!pskb_may_pull(rx->skb, 1906 + hdrlen + ieee80211_get_mesh_hdrlen(mesh_hdr))) 1907 + return RX_DROP_MONITOR; 1908 + 1909 + /* reload pointers */ 1910 + hdr = (struct ieee80211_hdr *) skb->data; 1907 1911 mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen); 1908 1912 1909 1913 /* frame is in RMC, don't forward */ ··· 1926 1902 mesh_rmc_check(hdr->addr3, mesh_hdr, rx->sdata)) 1927 1903 return RX_DROP_MONITOR; 1928 1904 1929 - if (!ieee80211_is_data(hdr->frame_control)) 1905 + if (!ieee80211_is_data(hdr->frame_control) || 1906 + !(status->rx_flags & IEEE80211_RX_RA_MATCH)) 1930 1907 return RX_CONTINUE; 1931 1908 1932 1909 if (!mesh_hdr->ttl) ··· 1941 1916 if (is_multicast_ether_addr(hdr->addr1)) { 1942 1917 mpp_addr = hdr->addr3; 1943 1918 proxied_addr = mesh_hdr->eaddr1; 1944 - } else { 1919 + } else if (mesh_hdr->flags & MESH_FLAGS_AE_A5_A6) { 1920 + /* has_a4 already checked in ieee80211_rx_mesh_check */ 1945 1921 mpp_addr = hdr->addr4; 1946 1922 proxied_addr = mesh_hdr->eaddr2; 1923 + } else { 1924 + return RX_DROP_MONITOR; 1947 1925 } 1948 1926 1949 1927 rcu_read_lock(); ··· 1974 1946 } 1975 1947 skb_set_queue_mapping(skb, q); 1976 1948 1977 - if (!(status->rx_flags & IEEE80211_RX_RA_MATCH)) 1978 - goto out; 1979 - 1980 1949 if (!--mesh_hdr->ttl) { 1981 1950 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_ttl); 1982 - return RX_DROP_MONITOR; 1951 + goto out; 1983 1952 } 1984 1953 1985 1954 if (!ifmsh->mshcfg.dot11MeshForwarding) ··· 2383 2358 } 2384 2359 break; 2385 2360 case WLAN_CATEGORY_SELF_PROTECTED: 2361 + if (len < (IEEE80211_MIN_ACTION_SIZE + 2362 + sizeof(mgmt->u.action.u.self_prot.action_code))) 2363 + break; 2364 + 2386 2365 switch (mgmt->u.action.u.self_prot.action_code) { 2387 2366 case WLAN_SP_MESH_PEERING_OPEN: 2388 2367 case WLAN_SP_MESH_PEERING_CLOSE: ··· 2405 2376 } 2406 2377 break; 2407 2378 case WLAN_CATEGORY_MESH_ACTION: 2379 + if (len < (IEEE80211_MIN_ACTION_SIZE + 2380 + sizeof(mgmt->u.action.u.mesh_action.action_code))) 2381 + break; 2382 + 2408 2383 if (!ieee80211_vif_is_mesh(&sdata->vif)) 2409 2384 break; 2410 2385 if (mesh_action_is_path_sel(mgmt) && ··· 2951 2918 if (ieee80211_is_data(fc) || ieee80211_is_mgmt(fc)) 2952 2919 local->dot11ReceivedFragmentCount++; 2953 2920 2954 - if (ieee80211_is_mgmt(fc)) 2955 - err = skb_linearize(skb); 2956 - else 2921 + if (ieee80211_is_mgmt(fc)) { 2922 + /* drop frame if too short for header */ 2923 + if (skb->len < ieee80211_hdrlen(fc)) 2924 + err = -ENOBUFS; 2925 + else 2926 + err = skb_linearize(skb); 2927 + } else { 2957 2928 err = !pskb_may_pull(skb, ieee80211_hdrlen(fc)); 2929 + } 2958 2930 2959 2931 if (err) { 2960 2932 dev_kfree_skb(skb);
+35 -7
net/mac80211/util.c
··· 643 643 break; 644 644 } 645 645 646 - if (id != WLAN_EID_VENDOR_SPECIFIC && 647 - id != WLAN_EID_QUIET && 648 - test_bit(id, seen_elems)) { 649 - elems->parse_error = true; 650 - left -= elen; 651 - pos += elen; 652 - continue; 646 + switch (id) { 647 + case WLAN_EID_SSID: 648 + case WLAN_EID_SUPP_RATES: 649 + case WLAN_EID_FH_PARAMS: 650 + case WLAN_EID_DS_PARAMS: 651 + case WLAN_EID_CF_PARAMS: 652 + case WLAN_EID_TIM: 653 + case WLAN_EID_IBSS_PARAMS: 654 + case WLAN_EID_CHALLENGE: 655 + case WLAN_EID_RSN: 656 + case WLAN_EID_ERP_INFO: 657 + case WLAN_EID_EXT_SUPP_RATES: 658 + case WLAN_EID_HT_CAPABILITY: 659 + case WLAN_EID_HT_OPERATION: 660 + case WLAN_EID_VHT_CAPABILITY: 661 + case WLAN_EID_VHT_OPERATION: 662 + case WLAN_EID_MESH_ID: 663 + case WLAN_EID_MESH_CONFIG: 664 + case WLAN_EID_PEER_MGMT: 665 + case WLAN_EID_PREQ: 666 + case WLAN_EID_PREP: 667 + case WLAN_EID_PERR: 668 + case WLAN_EID_RANN: 669 + case WLAN_EID_CHANNEL_SWITCH: 670 + case WLAN_EID_EXT_CHANSWITCH_ANN: 671 + case WLAN_EID_COUNTRY: 672 + case WLAN_EID_PWR_CONSTRAINT: 673 + case WLAN_EID_TIMEOUT_INTERVAL: 674 + if (test_bit(id, seen_elems)) { 675 + elems->parse_error = true; 676 + left -= elen; 677 + pos += elen; 678 + continue; 679 + } 680 + break; 653 681 } 654 682 655 683 if (calc_crc && id < 64 && (filter & (1ULL << id)))
+1 -2
net/wireless/core.c
··· 529 529 for (i = 0; i < sband->n_channels; i++) { 530 530 sband->channels[i].orig_flags = 531 531 sband->channels[i].flags; 532 - sband->channels[i].orig_mag = 533 - sband->channels[i].max_antenna_gain; 532 + sband->channels[i].orig_mag = INT_MAX; 534 533 sband->channels[i].orig_mpwr = 535 534 sband->channels[i].max_power; 536 535 sband->channels[i].band = band;
+3 -2
net/wireless/reg.c
··· 908 908 map_regdom_flags(reg_rule->flags) | bw_flags; 909 909 chan->max_antenna_gain = chan->orig_mag = 910 910 (int) MBI_TO_DBI(power_rule->max_antenna_gain); 911 - chan->max_power = chan->orig_mpwr = 911 + chan->max_reg_power = chan->max_power = chan->orig_mpwr = 912 912 (int) MBM_TO_DBM(power_rule->max_eirp); 913 913 return; 914 914 } ··· 1331 1331 1332 1332 chan->flags |= map_regdom_flags(reg_rule->flags) | bw_flags; 1333 1333 chan->max_antenna_gain = (int) MBI_TO_DBI(power_rule->max_antenna_gain); 1334 - chan->max_power = (int) MBM_TO_DBM(power_rule->max_eirp); 1334 + chan->max_reg_power = chan->max_power = 1335 + (int) MBM_TO_DBM(power_rule->max_eirp); 1335 1336 } 1336 1337 1337 1338 static void handle_band_custom(struct wiphy *wiphy, enum ieee80211_band band,
+8 -6
net/wireless/util.c
··· 311 311 } 312 312 EXPORT_SYMBOL(ieee80211_get_hdrlen_from_skb); 313 313 314 - static int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr) 314 + unsigned int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr) 315 315 { 316 316 int ae = meshhdr->flags & MESH_FLAGS_AE; 317 - /* 7.1.3.5a.2 */ 317 + /* 802.11-2012, 8.2.4.7.3 */ 318 318 switch (ae) { 319 + default: 319 320 case 0: 320 321 return 6; 321 322 case MESH_FLAGS_AE_A4: 322 323 return 12; 323 324 case MESH_FLAGS_AE_A5_A6: 324 325 return 18; 325 - case (MESH_FLAGS_AE_A4 | MESH_FLAGS_AE_A5_A6): 326 - return 24; 327 - default: 328 - return 6; 329 326 } 330 327 } 328 + EXPORT_SYMBOL(ieee80211_get_mesh_hdrlen); 331 329 332 330 int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr, 333 331 enum nl80211_iftype iftype) ··· 373 375 /* make sure meshdr->flags is on the linear part */ 374 376 if (!pskb_may_pull(skb, hdrlen + 1)) 375 377 return -1; 378 + if (meshdr->flags & MESH_FLAGS_AE_A4) 379 + return -1; 376 380 if (meshdr->flags & MESH_FLAGS_AE_A5_A6) { 377 381 skb_copy_bits(skb, hdrlen + 378 382 offsetof(struct ieee80211s_hdr, eaddr1), ··· 398 398 (struct ieee80211s_hdr *) (skb->data + hdrlen); 399 399 /* make sure meshdr->flags is on the linear part */ 400 400 if (!pskb_may_pull(skb, hdrlen + 1)) 401 + return -1; 402 + if (meshdr->flags & MESH_FLAGS_AE_A5_A6) 401 403 return -1; 402 404 if (meshdr->flags & MESH_FLAGS_AE_A4) 403 405 skb_copy_bits(skb, hdrlen +