tree: https://github.com/ceph/ceph-client.git tls-tracing-only head: ffad14ce035a047cbfda2d38f7ae37b0767de136 commit: 310aa14b5bf4d5ecd1abf6a00782e044f7d76940 [10/14] ceph integration config: hexagon-allyesconfig (https://download.01.org/0day-ci/archive/20250808/202508080748.1UpqZMm5-lkp@xxxxxxxxx/config) compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 7b8dea265e72c3037b6b1e54d5ab51b7e14f328b) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250808/202508080748.1UpqZMm5-lkp@xxxxxxxxx/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@xxxxxxxxx> | Closes: https://lore.kernel.org/oe-kbuild-all/202508080748.1UpqZMm5-lkp@xxxxxxxxx/ All warnings (new ones prefixed by >>): >> lib/rtlog/rtlog_des.c:22: warning: Function parameter or struct member 'buffer' not described in 'rtlog_des_get_u32' >> lib/rtlog/rtlog_des.c:22: warning: Function parameter or struct member 'buf_end' not described in 'rtlog_des_get_u32' >> lib/rtlog/rtlog_des.c:22: warning: Function parameter or struct member 'value' not described in 'rtlog_des_get_u32' >> lib/rtlog/rtlog_des.c:38: warning: Function parameter or struct member 'buffer' not described in 'rtlog_des_get_u64' >> lib/rtlog/rtlog_des.c:38: warning: Function parameter or struct member 'buf_end' not described in 'rtlog_des_get_u64' >> lib/rtlog/rtlog_des.c:38: warning: Function parameter or struct member 'value' not described in 'rtlog_des_get_u64' >> lib/rtlog/rtlog_des.c:54: warning: Function parameter or struct member 'buffer' not described in 'rtlog_des_get_ptr' >> lib/rtlog/rtlog_des.c:54: warning: Function parameter or struct member 'buf_end' not described in 'rtlog_des_get_ptr' >> lib/rtlog/rtlog_des.c:54: warning: Function parameter or struct member 'value' not described in 'rtlog_des_get_ptr' >> lib/rtlog/rtlog_des.c:71: warning: Function parameter or struct member 'buffer' not described in 'rtlog_des_get_string' >> lib/rtlog/rtlog_des.c:71: warning: Function parameter or struct member 'buf_end' not described in 'rtlog_des_get_string' >> lib/rtlog/rtlog_des.c:71: warning: Function parameter or struct member 'out' not described in 'rtlog_des_get_string' >> lib/rtlog/rtlog_des.c:71: warning: Function parameter or struct member 'out_size' not described in 'rtlog_des_get_string' >> lib/rtlog/rtlog_des.c:118: warning: Function parameter or struct member 'fmt' not described in 'rtlog_des_reconstruct' >> lib/rtlog/rtlog_des.c:118: warning: Function parameter or struct member 'buffer' not described in 'rtlog_des_reconstruct' >> lib/rtlog/rtlog_des.c:118: warning: Function parameter or struct member 'nr_args' not described in 'rtlog_des_reconstruct' >> lib/rtlog/rtlog_des.c:118: warning: Function parameter or struct member 'size' not described in 'rtlog_des_reconstruct' >> lib/rtlog/rtlog_des.c:118: warning: Function parameter or struct member 'out' not described in 'rtlog_des_reconstruct' >> lib/rtlog/rtlog_des.c:118: warning: Function parameter or struct member 'out_size' not described in 'rtlog_des_reconstruct' >> lib/rtlog/rtlog_des.c:391: warning: Function parameter or struct member 'entry' not described in 'rtlog_log_reconstruct' lib/rtlog/rtlog_des.c:391: warning: Function parameter or struct member 'output' not described in 'rtlog_log_reconstruct' lib/rtlog/rtlog_des.c:391: warning: Function parameter or struct member 'output_size' not described in 'rtlog_log_reconstruct' vim +22 lib/rtlog/rtlog_des.c 17 18 /** 19 * rtlog_des_get_u32 - Extract a 32-bit integer from binary buffer 20 */ 21 int rtlog_des_get_u32(const char **buffer, const char *buf_end, u32 *value) > 22 { 23 if (*buffer + sizeof(u32) > buf_end) { 24 pr_err("rtlog_des: buffer overrun reading u32\n"); 25 return -EFAULT; 26 } 27 28 *value = *(u32 *)(*buffer); 29 *buffer += sizeof(u32); 30 return 0; 31 } 32 EXPORT_SYMBOL_GPL(rtlog_des_get_u32); 33 34 /** 35 * rtlog_des_get_u64 - Extract a 64-bit integer from binary buffer 36 */ 37 int rtlog_des_get_u64(const char **buffer, const char *buf_end, u64 *value) > 38 { 39 if (*buffer + sizeof(u64) > buf_end) { 40 pr_err("rtlog_des: buffer overrun reading u64\n"); 41 return -EFAULT; 42 } 43 44 *value = *(u64 *)(*buffer); 45 *buffer += sizeof(u64); 46 return 0; 47 } 48 EXPORT_SYMBOL_GPL(rtlog_des_get_u64); 49 50 /** 51 * rtlog_des_get_ptr - Extract a pointer from binary buffer 52 */ 53 int rtlog_des_get_ptr(const char **buffer, const char *buf_end, unsigned long *value) > 54 { 55 if (*buffer + sizeof(unsigned long) > buf_end) { 56 pr_err("rtlog_des: buffer overrun reading pointer\n"); 57 return -EFAULT; 58 } 59 60 *value = *(unsigned long *)(*buffer); 61 *buffer += sizeof(unsigned long); 62 return 0; 63 } 64 EXPORT_SYMBOL_GPL(rtlog_des_get_ptr); 65 66 /** 67 * rtlog_des_get_string - Extract a string from the binary buffer 68 */ 69 int rtlog_des_get_string(const char **buffer, const char *buf_end, 70 char *out, size_t out_size) > 71 { 72 const char *str = *buffer; 73 size_t str_len; 74 size_t max_scan_len; 75 size_t padded_len; 76 77 if (*buffer >= buf_end) { 78 pr_err("rtlog_des: buffer overrun at string argument\n"); 79 return -EFAULT; 80 } 81 82 /* Calculate maximum safe length to scan for null terminator */ 83 max_scan_len = buf_end - *buffer; 84 85 /* Find string length with bounds checking */ 86 str_len = strnlen(str, max_scan_len); 87 if (str_len == max_scan_len && str[str_len - 1] != '\0') { 88 pr_err("rtlog_des: unterminated string in buffer\n"); 89 return -EFAULT; 90 } 91 92 /* Advance buffer pointer with proper alignment */ 93 padded_len = round_up(str_len + 1, 4); 94 *buffer += padded_len; 95 96 /* Check if buffer advance exceeds entry bounds */ 97 if (*buffer > buf_end) { 98 pr_err("rtlog_des: string extends beyond buffer bounds\n"); 99 return -EFAULT; 100 } 101 102 /* Copy string to output with bounds checking */ 103 if (str_len >= out_size) 104 str_len = out_size - 1; 105 106 memcpy(out, str, str_len); 107 out[str_len] = '\0'; 108 109 return 0; 110 } 111 EXPORT_SYMBOL_GPL(rtlog_des_get_string); 112 113 /** 114 * rtlog_des_reconstruct - Reconstruct formatted string from binary data 115 */ 116 int rtlog_des_reconstruct(const char *fmt, const void *buffer, size_t nr_args, 117 size_t size, char *out, size_t out_size) > 118 { 119 const char *buf_start = (const char *)buffer; 120 const char *buf_ptr = buf_start; 121 const char *buf_end = buf_start + size; 122 const char *fmt_ptr = fmt; 123 char *out_ptr = out; 124 size_t remaining = out_size - 1; /* Reserve space for null terminator */ 125 size_t arg_count = 0; 126 int ret; 127 128 if (!fmt || !buffer || !out || !out_size) { 129 pr_err("rtlog_des_reconstruct: invalid parameters\n"); 130 return -EINVAL; 131 } 132 133 *out_ptr = '\0'; 134 135 /* Process the format string */ 136 while (*fmt_ptr && remaining > 0) { 137 if (*fmt_ptr != '%') { 138 /* Copy literal character */ 139 *out_ptr++ = *fmt_ptr++; 140 remaining--; 141 continue; 142 } 143 144 /* Skip the '%' */ 145 fmt_ptr++; 146 147 /* Handle %% */ 148 if (*fmt_ptr == '%') { 149 *out_ptr++ = '%'; 150 fmt_ptr++; 151 remaining--; 152 continue; 153 } 154 155 /* Skip flags, width, precision modifiers */ 156 while (*fmt_ptr && (*fmt_ptr == '-' || *fmt_ptr == '+' || 157 *fmt_ptr == '#' || *fmt_ptr == '0' || 158 *fmt_ptr == ' ')) { 159 fmt_ptr++; 160 } 161 162 while (*fmt_ptr && (*fmt_ptr >= '0' && *fmt_ptr <= '9')) { 163 fmt_ptr++; 164 } 165 if (*fmt_ptr == '*') { 166 fmt_ptr++; 167 } 168 169 if (*fmt_ptr == '.') { 170 fmt_ptr++; 171 while (*fmt_ptr && (*fmt_ptr >= '0' && *fmt_ptr <= '9')) { 172 fmt_ptr++; 173 } 174 if (*fmt_ptr == '*') { 175 fmt_ptr++; 176 } 177 } 178 179 /* Check argument count limit */ 180 if (arg_count >= nr_args) { 181 pr_err("rtlog_des_reconstruct: too many format specifiers\n"); 182 return -EINVAL; 183 } 184 185 /* Parse and handle format specifier */ 186 switch (*fmt_ptr) { 187 case 's': { /* String */ 188 char str_buf[256]; 189 ret = rtlog_des_get_string(&buf_ptr, buf_end, str_buf, sizeof(str_buf)); 190 if (ret) 191 return ret; 192 193 ret = snprintf(out_ptr, remaining, "%s", str_buf); 194 if (ret > 0) { 195 if (ret > remaining) 196 ret = remaining; 197 out_ptr += ret; 198 remaining -= ret; 199 } 200 break; 201 } 202 203 case 'd': case 'i': { /* Integer */ 204 u32 val; 205 ret = rtlog_des_get_u32(&buf_ptr, buf_end, &val); 206 if (ret) 207 return ret; 208 209 ret = snprintf(out_ptr, remaining, "%d", (int)val); 210 if (ret > 0) { 211 if (ret > remaining) 212 ret = remaining; 213 out_ptr += ret; 214 remaining -= ret; 215 } 216 break; 217 } 218 219 case 'u': { /* Unsigned integer */ 220 u32 val; 221 ret = rtlog_des_get_u32(&buf_ptr, buf_end, &val); 222 if (ret) 223 return ret; 224 225 ret = snprintf(out_ptr, remaining, "%u", val); 226 if (ret > 0) { 227 if (ret > remaining) 228 ret = remaining; 229 out_ptr += ret; 230 remaining -= ret; 231 } 232 break; 233 } 234 235 case 'x': { /* Hex integer (lowercase) */ 236 u32 val; 237 ret = rtlog_des_get_u32(&buf_ptr, buf_end, &val); 238 if (ret) 239 return ret; 240 241 ret = snprintf(out_ptr, remaining, "%x", val); 242 if (ret > 0) { 243 if (ret > remaining) 244 ret = remaining; 245 out_ptr += ret; 246 remaining -= ret; 247 } 248 break; 249 } 250 251 case 'X': { /* Hex integer (uppercase) */ 252 u32 val; 253 ret = rtlog_des_get_u32(&buf_ptr, buf_end, &val); 254 if (ret) 255 return ret; 256 257 ret = snprintf(out_ptr, remaining, "%X", val); 258 if (ret > 0) { 259 if (ret > remaining) 260 ret = remaining; 261 out_ptr += ret; 262 remaining -= ret; 263 } 264 break; 265 } 266 267 case 'l': { /* Handle long types */ 268 if (*(fmt_ptr + 1) == 'l') { 269 /* long long */ 270 fmt_ptr++; /* Skip second 'l' */ 271 switch (*(fmt_ptr + 1)) { 272 case 'd': case 'i': 273 fmt_ptr++; /* Skip format char */ 274 { 275 u64 val; 276 ret = rtlog_des_get_u64(&buf_ptr, buf_end, &val); 277 if (ret) 278 return ret; 279 280 ret = snprintf(out_ptr, remaining, "%lld", (long long)val); 281 if (ret > 0) { 282 if (ret > remaining) 283 ret = remaining; 284 out_ptr += ret; 285 remaining -= ret; 286 } 287 } 288 break; 289 case 'u': 290 fmt_ptr++; /* Skip format char */ 291 { 292 u64 val; 293 ret = rtlog_des_get_u64(&buf_ptr, buf_end, &val); 294 if (ret) 295 return ret; 296 297 ret = snprintf(out_ptr, remaining, "%llu", val); 298 if (ret > 0) { 299 if (ret > remaining) 300 ret = remaining; 301 out_ptr += ret; 302 remaining -= ret; 303 } 304 } 305 break; 306 case 'x': 307 fmt_ptr++; /* Skip format char */ 308 { 309 u64 val; 310 ret = rtlog_des_get_u64(&buf_ptr, buf_end, &val); 311 if (ret) 312 return ret; 313 314 ret = snprintf(out_ptr, remaining, "%llx", val); 315 if (ret > 0) { 316 if (ret > remaining) 317 ret = remaining; 318 out_ptr += ret; 319 remaining -= ret; 320 } 321 } 322 break; 323 default: 324 pr_err("rtlog_des: unsupported format %%ll%c\n", *(fmt_ptr + 1)); 325 return -EINVAL; 326 } 327 } else { 328 /* long */ 329 switch (*(fmt_ptr + 1)) { 330 case 'd': case 'i': case 'u': case 'x': case 'X': 331 fmt_ptr++; /* Skip format char */ 332 { 333 unsigned long val; 334 ret = rtlog_des_get_ptr(&buf_ptr, buf_end, &val); 335 if (ret) 336 return ret; 337 338 ret = snprintf(out_ptr, remaining, "%lx", val); 339 if (ret > 0) { 340 if (ret > remaining) 341 ret = remaining; 342 out_ptr += ret; 343 remaining -= ret; 344 } 345 } 346 break; 347 default: 348 pr_err("rtlog_des: unsupported format %%l%c\n", *(fmt_ptr + 1)); 349 return -EINVAL; 350 } 351 } 352 break; 353 } 354 355 case 'p': { /* Pointer */ 356 unsigned long val; 357 ret = rtlog_des_get_ptr(&buf_ptr, buf_end, &val); 358 if (ret) 359 return ret; 360 361 ret = snprintf(out_ptr, remaining, "%p", (void *)val); 362 if (ret > 0) { 363 if (ret > remaining) 364 ret = remaining; 365 out_ptr += ret; 366 remaining -= ret; 367 } 368 break; 369 } 370 371 default: 372 pr_err("rtlog_des: unsupported format specifier %%%c\n", *fmt_ptr); 373 return -EINVAL; 374 } 375 376 fmt_ptr++; 377 arg_count++; 378 } 379 380 /* Null terminate the output */ 381 *out_ptr = '\0'; 382 return 0; 383 } 384 EXPORT_SYMBOL_GPL(rtlog_des_reconstruct); 385 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki