ar71xx: mikrotik: bypass id check in __rb_get_wlan_data()
authorThibaut VARÈNE <hacks@slashdirt.org>
Fri, 8 May 2020 11:39:10 +0000 (13:39 +0200)
committerKoen Vandeputte <koen.vandeputte@ncentric.com>
Tue, 12 May 2020 10:41:08 +0000 (12:41 +0200)
The id parameter in __rb_get_wlan_data() was incorrectly used on the
assumption that id "0" would always be tied to ath9k with RLE encoding
and positive id (in fact, only id "1" was valid) would always be tied to
("external") ath10k with LZO encoding.

Newer hardware revisions of supported devices prove this assumption to
be invalid, with ath9k caldata being now wrapped in MAGIC_ERD and LZO
compressed, so disable this check to allow newer hardware to correctly
decode caldata for ath9k. Since ath10k caldata is no longer pulled from
this implementation, this commit also disables the publication in sysfs
to avoid wasting memory.

Note: this patch assumes that ath9k caldata is never stored with the new
"LZOR" encoding scheme found on some ath10k devices.

Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
target/linux/ar71xx/files/arch/mips/ath79/routerboot.c

index 76776e1d843b1f7969f0ad82938b8edac15b2b88..4c0cd1314a5d1ef33c565268b24bbae926c6adef 100644 (file)
@@ -206,10 +206,7 @@ __rb_get_wlan_data(u16 id)
                u8 *erd_data;
                u16 erd_len;
 
-               if (id == 0)
-                       goto err_free;
-
-               err = routerboot_find_tag(tag, tag_len, id,
+               err = routerboot_find_tag(tag, tag_len, 0x1,
                                          &erd_data, &erd_len);
                if (err) {
                        pr_err("no ERD data found for id %u\n", id);
@@ -224,9 +221,6 @@ __rb_get_wlan_data(u16 id)
                        goto err_free;
                }
        } else {
-               if (id != 0)
-                       goto err_free;
-
                err = rle_decode((char *) tag, tag_len, buf, RB_ART_SIZE,
                                 &src_done, &dst_done);
                if (err) {
@@ -300,6 +294,7 @@ rb_init_info(void *data, unsigned int size)
        return &rb_info;
 }
 
+#if 0
 static char *rb_ext_wlan_data;
 
 static ssize_t
@@ -356,3 +351,4 @@ err_free_wlan_data:
 }
 
 late_initcall(rb_sysfs_init);
+#endif