0003-Fix-using-sprintf-for-extending-string-which-causes-.patch 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. From 5b6641978e8fa68bca05d224a61f8513b010eda8 Mon Sep 17 00:00:00 2001
  2. From: Coleman <omegacoleman@gmail.com>
  3. Date: Fri, 17 Jul 2020 08:53:00 +0800
  4. Subject: [PATCH] Fix using sprintf for extending string, which causes
  5. undefined behavior
  6. [Upstream: https://github.com/abperiasamy/rtl8812AU_8821AU_linux/commit/be57045a0933d64e958878696883e9cf998e1bf3.patch]
  7. Signed-off-by: Coleman <omegacoleman@gmail.com>
  8. Signed-off-by: Christian Stewart <christian@paral.in>
  9. ---
  10. core/rtw_mp.c | 2 +-
  11. os_dep/linux/ioctl_linux.c | 108 ++++++++++++++++++-------------------
  12. 2 files changed, 55 insertions(+), 55 deletions(-)
  13. diff --git a/core/rtw_mp.c b/core/rtw_mp.c
  14. index c2e400d..989bb3e 100644
  15. --- a/core/rtw_mp.c
  16. +++ b/core/rtw_mp.c
  17. @@ -1871,7 +1871,7 @@ u32 mp_query_psd(PADAPTER pAdapter, u8 *data)
  18. } else {
  19. psd_data = rtw_GetPSDData(pAdapter, i);
  20. }
  21. - sprintf(data, "%s%x ", data, psd_data);
  22. + sprintf(data + strlen(data), "%x ", psd_data);
  23. i++;
  24. }
  25. diff --git a/os_dep/linux/ioctl_linux.c b/os_dep/linux/ioctl_linux.c
  26. index c74a153..9543fa3 100644
  27. --- a/os_dep/linux/ioctl_linux.c
  28. +++ b/os_dep/linux/ioctl_linux.c
  29. @@ -9080,19 +9080,19 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  30. sprintf(extra, "\n");
  31. for (i = 0; i < EFUSE_MAP_SIZE; i += 16) {
  32. // DBG_871X("0x%02x\t", i);
  33. - sprintf(extra, "%s0x%02x\t", extra, i);
  34. + sprintf(extra + strlen(extra), "0x%02x\t", i);
  35. for (j=0; j<8; j++) {
  36. // DBG_871X("%02X ", data[i+j]);
  37. - sprintf(extra, "%s%02X ", extra, PROMContent[i+j]);
  38. + sprintf(extra + strlen(extra), "%02X ", PROMContent[i+j]);
  39. }
  40. // DBG_871X("\t");
  41. - sprintf(extra, "%s\t", extra);
  42. + sprintf(extra + strlen(extra), "\t");
  43. for (; j<16; j++) {
  44. // DBG_871X("%02X ", data[i+j]);
  45. - sprintf(extra, "%s%02X ", extra, PROMContent[i+j]);
  46. + sprintf(extra + strlen(extra), "%02X ", PROMContent[i+j]);
  47. }
  48. // DBG_871X("\n");
  49. - sprintf(extra,"%s\n",extra);
  50. + sprintf(extra + strlen(extra), "\n");
  51. }
  52. // DBG_871X("\n");
  53. } else if (strcmp(tmp[0], "realmap") == 0) {
  54. @@ -9107,19 +9107,19 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  55. sprintf(extra, "\n");
  56. for (i = 0; i < EFUSE_MAP_SIZE; i += 16) {
  57. // DBG_871X("0x%02x\t", i);
  58. - sprintf(extra, "%s0x%02x\t", extra, i);
  59. + sprintf(extra + strlen(extra), "0x%02x\t", i);
  60. for (j=0; j<8; j++) {
  61. // DBG_871X("%02X ", data[i+j]);
  62. - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeEfuseInitMap[i+j]);
  63. + sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeEfuseInitMap[i+j]);
  64. }
  65. // DBG_871X("\t");
  66. - sprintf(extra, "%s\t", extra);
  67. + sprintf(extra + strlen(extra), "\t");
  68. for (; j<16; j++) {
  69. // DBG_871X("%02X ", data[i+j]);
  70. - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeEfuseInitMap[i+j]);
  71. + sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeEfuseInitMap[i+j]);
  72. }
  73. // DBG_871X("\n");
  74. - sprintf(extra,"%s\n",extra);
  75. + sprintf(extra + strlen(extra), "\n");
  76. }
  77. // DBG_871X("\n");
  78. } else if (strcmp(tmp[0], "rmap") == 0) {
  79. @@ -9158,7 +9158,7 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  80. *extra = 0;
  81. for (i=0; i<cnts; i++) {
  82. // DBG_871X("0x%02x ", data[i]);
  83. - sprintf(extra, "%s0x%02X ", extra, data[i]);
  84. + sprintf(extra + strlen(extra), "0x%02X ", data[i]);
  85. }
  86. // DBG_871X("}\n");
  87. } else if (strcmp(tmp[0], "realraw") == 0) {
  88. @@ -9174,17 +9174,17 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  89. sprintf(extra, "\n0x00\t");
  90. for (i=0; i< mapLen; i++) {
  91. // DBG_871X("%02X", rawdata[i]);
  92. - sprintf(extra, "%s%02X", extra, rawdata[i]);
  93. + sprintf(extra + strlen(extra), "%02X", rawdata[i]);
  94. if ((i & 0xF) == 0xF) {
  95. // DBG_871X("\n");
  96. - sprintf(extra, "%s\n", extra);
  97. - sprintf(extra, "%s0x%02x\t", extra, i+1);
  98. + sprintf(extra + strlen(extra), "\n");
  99. + sprintf(extra + strlen(extra), "0x%02x\t", i+1);
  100. } else if ((i & 0x7) == 0x7) {
  101. // DBG_871X("\t");
  102. - sprintf(extra, "%s \t", extra);
  103. + sprintf(extra + strlen(extra), " \t");
  104. } else {
  105. // DBG_871X(" ");
  106. - sprintf(extra, "%s ", extra);
  107. + sprintf(extra + strlen(extra), " ");
  108. }
  109. }
  110. // DBG_871X("}\n");
  111. @@ -9269,10 +9269,10 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  112. *extra = 0;
  113. for (i=0; i<cnts; i++) {
  114. // DBG_871X("%02X", data[i]);
  115. - sprintf(extra, "%s%02X", extra, data[i]);
  116. + sprintf(extra + strlen(extra), "%02X", data[i]);
  117. if (i != (cnts-1)) {
  118. // DBG_871X(":");
  119. - sprintf(extra,"%s:",extra);
  120. + sprintf(extra + strlen(extra), ":");
  121. }
  122. }
  123. // DBG_871X("}\n");
  124. @@ -9330,10 +9330,10 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  125. *extra = 0;
  126. for (i=0; i<cnts; i++) {
  127. // DBG_871X("0x%02x", data[i]);
  128. - sprintf(extra, "%s0x%02X", extra, data[i]);
  129. + sprintf(extra + strlen(extra), "0x%02X", data[i]);
  130. if (i != (cnts-1)) {
  131. // DBG_871X(",");
  132. - sprintf(extra,"%s,",extra);
  133. + sprintf(extra + strlen(extra), ",");
  134. }
  135. }
  136. // DBG_871X("}\n");
  137. @@ -9355,19 +9355,19 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  138. sprintf(extra, "\n");
  139. for (i=0; i<512; i+=16) { // set 512 because the iwpriv's extra size have limit 0x7FF
  140. // DBG_871X("0x%03x\t", i);
  141. - sprintf(extra, "%s0x%03x\t", extra, i);
  142. + sprintf(extra + strlen(extra), "0x%03x\t", i);
  143. for (j=0; j<8; j++) {
  144. // DBG_871X("%02X ", pEfuseHal->BTEfuseInitMap[i+j]);
  145. - sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]);
  146. + sprintf(extra + strlen(extra), "%02X ", pEfuseHal->BTEfuseInitMap[i+j]);
  147. }
  148. // DBG_871X("\t");
  149. - sprintf(extra,"%s\t",extra);
  150. + sprintf(extra + strlen(extra), "\t");
  151. for (; j<16; j++) {
  152. // DBG_871X("%02X ", pEfuseHal->BTEfuseInitMap[i+j]);
  153. - sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]);
  154. + sprintf(extra + strlen(extra), "%02X ", pEfuseHal->BTEfuseInitMap[i+j]);
  155. }
  156. // DBG_871X("\n");
  157. - sprintf(extra, "%s\n", extra);
  158. + sprintf(extra + strlen(extra), "\n");
  159. }
  160. // DBG_871X("\n");
  161. } else if (strcmp(tmp[0],"btbmap") == 0) {
  162. @@ -9384,19 +9384,19 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  163. sprintf(extra, "\n");
  164. for (i=512; i<1024 ; i+=16) {
  165. // DBG_871X("0x%03x\t", i);
  166. - sprintf(extra, "%s0x%03x\t", extra, i);
  167. + sprintf(extra + strlen(extra), "0x%03x\t", i);
  168. for (j=0; j<8; j++) {
  169. // DBG_871X("%02X ", data[i+j]);
  170. - sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]);
  171. + sprintf(extra + strlen(extra), "%02X ", pEfuseHal->BTEfuseInitMap[i+j]);
  172. }
  173. // DBG_871X("\t");
  174. - sprintf(extra,"%s\t",extra);
  175. + sprintf(extra + strlen(extra), "\t");
  176. for (; j<16; j++) {
  177. // DBG_871X("%02X ", data[i+j]);
  178. - sprintf(extra, "%s%02X ", extra, pEfuseHal->BTEfuseInitMap[i+j]);
  179. + sprintf(extra + strlen(extra), "%02X ", pEfuseHal->BTEfuseInitMap[i+j]);
  180. }
  181. // DBG_871X("\n");
  182. - sprintf(extra, "%s\n", extra);
  183. + sprintf(extra + strlen(extra), "\n");
  184. }
  185. // DBG_871X("\n");
  186. } else if (strcmp(tmp[0],"btrmap") == 0) {
  187. @@ -9436,7 +9436,7 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  188. // DBG_871X("%s: bt efuse data={", __FUNCTION__);
  189. for (i=0; i<cnts; i++) {
  190. // DBG_871X("0x%02x ", data[i]);
  191. - sprintf(extra, "%s 0x%02X ", extra, data[i]);
  192. + sprintf(extra + strlen(extra), " 0x%02X ", data[i]);
  193. }
  194. // DBG_871X("}\n");
  195. DBG_871X(FUNC_ADPT_FMT ": BT MAC=[%s]\n", FUNC_ADPT_ARG(padapter), extra);
  196. @@ -9445,19 +9445,19 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  197. sprintf(extra, "\n");
  198. for (i=0; i<512; i+=16) {
  199. // DBG_871X("0x%03x\t", i);
  200. - sprintf(extra, "%s0x%03x\t", extra, i);
  201. + sprintf(extra + strlen(extra), "0x%03x\t", i);
  202. for (j=0; j<8; j++) {
  203. // DBG_871X("%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]);
  204. - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[i+j]);
  205. + sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]);
  206. }
  207. // DBG_871X("\t");
  208. - sprintf(extra, "%s\t", extra);
  209. + sprintf(extra + strlen(extra), "\t");
  210. for (; j<16; j++) {
  211. // DBG_871X("%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]);
  212. - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[i+j]);
  213. + sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]);
  214. }
  215. // DBG_871X("\n");
  216. - sprintf(extra, "%s\n", extra);
  217. + sprintf(extra + strlen(extra), "\n");
  218. }
  219. // DBG_871X("\n");
  220. } else if (strcmp(tmp[0],"btbfake") == 0) {
  221. @@ -9465,19 +9465,19 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  222. sprintf(extra, "\n");
  223. for (i=512; i<1024; i+=16) {
  224. // DBG_871X("0x%03x\t", i);
  225. - sprintf(extra, "%s0x%03x\t", extra, i);
  226. + sprintf(extra + strlen(extra), "0x%03x\t", i);
  227. for (j=0; j<8; j++) {
  228. // DBG_871X("%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]);
  229. - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[i+j]);
  230. + sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]);
  231. }
  232. // DBG_871X("\t");
  233. - sprintf(extra, "%s\t", extra);
  234. + sprintf(extra + strlen(extra), "\t");
  235. for (; j<16; j++) {
  236. // DBG_871X("%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]);
  237. - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[i+j]);
  238. + sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeBTEfuseModifiedMap[i+j]);
  239. }
  240. // DBG_871X("\n");
  241. - sprintf(extra, "%s\n", extra);
  242. + sprintf(extra + strlen(extra), "\n");
  243. }
  244. // DBG_871X("\n");
  245. } else if (strcmp(tmp[0],"wlrfkmap")== 0) {
  246. @@ -9485,19 +9485,19 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  247. sprintf(extra, "\n");
  248. for (i=0; i<EFUSE_MAP_SIZE; i+=16) {
  249. // DBG_871X("\t0x%02x\t", i);
  250. - sprintf(extra, "%s0x%02x\t", extra, i);
  251. + sprintf(extra + strlen(extra), "0x%02x\t", i);
  252. for (j=0; j<8; j++) {
  253. // DBG_871X("%02X ", pEfuseHal->fakeEfuseModifiedMap[i+j]);
  254. - sprintf(extra, "%s%02X ", extra, pEfuseHal->fakeEfuseModifiedMap[i+j]);
  255. + sprintf(extra + strlen(extra), "%02X ", pEfuseHal->fakeEfuseModifiedMap[i+j]);
  256. }
  257. // DBG_871X("\t");
  258. - sprintf(extra, "%s\t", extra);
  259. + sprintf(extra + strlen(extra), "\t");
  260. for (; j<16; j++) {
  261. // DBG_871X("%02X ", pEfuseHal->fakeEfuseModifiedMap[i+j]);
  262. - sprintf(extra, "%s %02X", extra, pEfuseHal->fakeEfuseModifiedMap[i+j]);
  263. + sprintf(extra + strlen(extra), " %02X", pEfuseHal->fakeEfuseModifiedMap[i+j]);
  264. }
  265. // DBG_871X("\n");
  266. - sprintf(extra, "%s\n", extra);
  267. + sprintf(extra + strlen(extra), "\n");
  268. }
  269. // DBG_871X("\n");
  270. @@ -9523,7 +9523,7 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  271. *extra = 0;
  272. for (i=0; i<cnts; i++) {
  273. DBG_871X("wlrfkrmap = 0x%02x \n", pEfuseHal->fakeEfuseModifiedMap[addr+i]);
  274. - sprintf(extra, "%s0x%02X ", extra, pEfuseHal->fakeEfuseModifiedMap[addr+i]);
  275. + sprintf(extra + strlen(extra), "0x%02X ", pEfuseHal->fakeEfuseModifiedMap[addr+i]);
  276. }
  277. } else if (strcmp(tmp[0],"btrfkrmap")== 0) {
  278. if ((tmp[1]==NULL) || (tmp[2]==NULL)) {
  279. @@ -9547,7 +9547,7 @@ static int rtw_mp_efuse_get(struct net_device *dev,
  280. *extra = 0;
  281. for (i=0; i<cnts; i++) {
  282. DBG_871X("wlrfkrmap = 0x%02x \n", pEfuseHal->fakeBTEfuseModifiedMap[addr+i]);
  283. - sprintf(extra, "%s0x%02X ", extra, pEfuseHal->fakeBTEfuseModifiedMap[addr+i]);
  284. + sprintf(extra + strlen(extra), "0x%02X ", pEfuseHal->fakeBTEfuseModifiedMap[addr+i]);
  285. }
  286. } else {
  287. sprintf(extra, "Command not found!");
  288. @@ -10409,7 +10409,7 @@ static int rtw_mp_read_reg(struct net_device *dev,
  289. pnext++;
  290. if ( *pnext != '\0' ) {
  291. strtout = simple_strtoul (pnext , &ptmp, 16);
  292. - sprintf( extra, "%s %d" ,extra ,strtout );
  293. + sprintf(extra + strlen(extra), " %d" ,strtout );
  294. } else {
  295. break;
  296. }
  297. @@ -10443,7 +10443,7 @@ static int rtw_mp_read_reg(struct net_device *dev,
  298. pnext++;
  299. if ( *pnext != '\0' ) {
  300. strtout = simple_strtoul (pnext , &ptmp, 16);
  301. - sprintf( extra, "%s %d" ,extra ,strtout );
  302. + sprintf(extra + strlen(extra), " %d" ,strtout );
  303. } else {
  304. break;
  305. }
  306. @@ -10566,7 +10566,7 @@ static int rtw_mp_read_rf(struct net_device *dev,
  307. pnext++;
  308. if ( *pnext != '\0' ) {
  309. strtou = simple_strtoul (pnext , &ptmp, 16);
  310. - sprintf( extra, "%s %d" ,extra ,strtou );
  311. + sprintf(extra + strlen(extra), " %d" ,strtou );
  312. } else {
  313. break;
  314. }
  315. @@ -12155,14 +12155,14 @@ todo:
  316. goto exit;
  317. #ifdef CONFIG_RTL8723A
  318. - sprintf(extra, "%s %d ", extra, (pMptCtx->mptOutBuf[i]& 0x3f));
  319. + sprintf(extra + strlen(extra), " %d ", (pMptCtx->mptOutBuf[i]& 0x3f));
  320. #else
  321. - sprintf(extra, "%s %d ", extra, (pMptCtx->mptOutBuf[i]& 0x1f));
  322. + sprintf(extra + strlen(extra), " %d ", (pMptCtx->mptOutBuf[i]& 0x1f));
  323. #endif
  324. }
  325. } else {
  326. for (i=4; i<pMptCtx->mptOutLen; i++) {
  327. - sprintf(extra, "%s 0x%x ", extra, pMptCtx->mptOutBuf[i]);
  328. + sprintf(extra + strlen(extra), " 0x%x ", pMptCtx->mptOutBuf[i]);
  329. }
  330. }
  331. --
  332. 2.28.0