<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/85647>85647</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
function with error attribute not eliminated after commit 3589cacfa8da8
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
nathanchance
</td>
</tr>
</table>
<pre>
This is a copy of the downstream report: https://github.com/ClangBuiltLinux/linux/issues/2007
After https://github.com/llvm/llvm-project/commit/3589cacfa8da89b9b5051e4dba659caa575e6b3f, I see the following error when building the Linux kernel for x86_64 using the `allmodconfig` configuration target, which enables `CONFIG_KCSAN` (i.e, `-fsanitize=thread`):
```
$ make -skj"$(nproc)" ARCH=x86_64 LLVM=1 clean allmodconfig net/bluetooth/sco.o
In file included from net/bluetooth/sco.c:27:
In file included from include/linux/module.h:13:
In file included from include/linux/stat.h:19:
In file included from include/linux/time.h:60:
In file included from include/linux/time32.h:13:
In file included from include/linux/timex.h:67:
In file included from arch/x86/include/asm/timex.h:6:
In file included from arch/x86/include/asm/tsc.h:10:
In file included from arch/x86/include/asm/msr.h:15:
In file included from include/linux/percpu.h:7:
In file included from include/linux/smp.h:118:
include/linux/thread_info.h:244:4: error: call to '__bad_copy_from' declared with 'error' attribute: copy source size is too small
244 | __bad_copy_from();
| ^
1 error generated.
```
which comes from [`check_copy_size()`](https://elixir.bootlin.com/linux/v6.8/source/include/linux/thread_info.h#L237) in [`copy_to_user()`](https://elixir.bootlin.com/linux/v6.8/source/include/linux/uaccess.h#L188). I also see the same error emitted in `net/bluetooth/l2cap_sock.c`. If I disable CONFIG_KCSAN, there is no error. The parent of 3589cacfa8da89b9b5051e4dba659caa575e6b3f does not show this error and GCC does not show an error either, so I am not sure the kernel code is at fault here but I could be missing something obvious.
`cvise` spits out:
```c
struct {
short hci_handledev_class[3];
} sco_sock_getsockopt_old_cinfo;
typeof(__builtin_choose_expr(
sizeof(char), 0,
__builtin_choose_expr(
sizeof(short), 0,
__builtin_choose_expr(sizeof(int), 0,
__builtin_choose_expr(sizeof(long), 0, 0)))))
sco_sock_getsockopt_old___val_gu;
void kmsan_unpoison_memory(void *address) {}
void __attribute__((__error__("copy source size is too small")))
__bad_copy_from();
long copy_to_user(void *from, long n) {
void *addr = from;
long bytes = n;
int sz = __builtin_object_size(addr, 0);
if (__builtin_expect(sz >= 0 && sz < bytes, 0))
__bad_copy_from();
return 0;
}
int sco_sock_getsockopt_old() {
int len;
long __tmp = sco_sock_getsockopt_old___val_gu;
kmsan_unpoison_memory(&__tmp);
len = __tmp;
len = __builtin_choose_expr(
0, 0, ({
typeof(0) __UNIQUE_ID___x1646 = len;
unsigned __UNIQUE_ID___y1647 = sizeof(sco_sock_getsockopt_old_cinfo);
__UNIQUE_ID___x1646 < __UNIQUE_ID___y1647 ? __UNIQUE_ID___x1646 : 0;
}));
copy_to_user(&sco_sock_getsockopt_old_cinfo, len);
return 0;
}
```
GCC 13.2.0:
```
$ x86_64-linux-gcc -O2 -Wall -c -o /dev/null sco.i
$ x86_64-linux-gcc -O2 -Wall -fsanitize=thread -c -o /dev/null sco.i
```
Clang @ https://github.com/llvm/llvm-project/commit/0cbbcf1ef006ce13a1fa94960067723982ae955a:
```
$ clang -O2 -Wall -c -o /dev/null sco.i
$ clang -O2 -Wall -fsanitize=thread -c -o /dev/null sco.i
```
Clang @ https://github.com/llvm/llvm-project/commit/3589cacfa8da89b9b5051e4dba659caa575e6b3f:
```
$ clang -O2 -Wall -c -o /dev/null sco.i
$ clang -O2 -Wall -fsanitize=thread -c -o /dev/null sco.i
sco.i:19:5: error: call to '__bad_copy_from' declared with 'error' attribute: copy source size is too small
19 | __bad_copy_from();
| ^
1 error generated.
```
cc @dtcxzyw
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWNuS4yjSfhp8k1EOCVkHX_jCbbfnr_h7e2J3Z3YvCYRSFlMIHIDq0E-_AbLVdtfBVT2xsaOosiSUx48kM4E7J_cacUXyTyTfzvjgO2NXmvuOaxH-cVab5mn1WycdSAcchDk8gWnBdwiNedDOW-Q9WDwY60m2hs77gyPZmtAdobu99N1Qz4XpCd1tFNf7T4NU_ovUwyOhO3W8S-cGdITuaJKUJNmSZD3-rluP9i2ZSt2fbjcHa_5A4QndCdP3MjxkebUUXLS8ani1rJd1nuQpLpqaF_lScJ6XORZ11hK6gVtwiNGx1ihlHqTeA1prLDx0qKEepGrCWKCIDsAdWo0KWmPhsSpYsYDBnShIkXCletMIo1u5J0UC49NguZdGg-d2jz4ofuik6AA1rxW6wLj59evu9hf2_5t_rr8GRkIrOcdASorkpnVcSy-_Icm2vrPIG1IkhC4DQGfQhcHxb3ylC-j5HcKNu_uDUErogtBKH6wRgZdSWP9j838k2x49-fLlX38j2TYFoZBrOPcFdLB7V6sBvTG-I3TnhJmbUdGthlYqBKmFGhpsoLWmf4VFkGxNy8nwl1mPb2fh0ptmUDjvSLZOsw9zO8_9yLv8MK-X_ai3SH6KN6M_a3XgfhxVXwOMWxEAfqyKsLQmSdz1l3L-lBgnRk-u4fCmlN7ZUUr-YTwOaMVhiNwfDyDXH0a9aTXxvgB5XFxM6tZEarpYkGwd_se8EB4EVwq8AUJLxmresJAgWVBLaAkNCsUtNvAgfRdoRj5aAvfeynrwGIWEpOrMYAWCk98wpFpvDLieKzVaB0AXCyDlBl67nqmvYk74dOIPV-An-edxKD1mtz1qtNxjM385ccTfMUcJ06MbQQ0lo0hEh-JuVBoMPyotEpJvCa0u8zYq-SjtvDbGK6lP-fuI9X0xr8LERBAuIuXl2aDZF5qVhC5B6pMtwQpv2ODQ_jcNGbgQ6NxoRFoFRXO4Ba6cmSqI4z0e4cVeeo9NtLNInudBRQU_MGfE3VyQIpnDbQu30EgXygFclAK6CcJtjA9tRvlz-K1DOHCL2ofC_N6KB43BIMWD68wD-FDhR4O5buCXzeYHAq5P_shgQ7DFmeB2P9IMdvT8WBOFaaKZ3EPLB-Uh2l0PHm5BmEE1UCP00sV66UyPvgtPpr6XZnDzHwqZuJcOQyV0B-kdmMG_VuzE-O68HYQHUk7h7zpjPXRCso7rRmGD90wo7hzJP2UhSk4rhZRbcMLEGWF79OFuDp4Z1TARom-i9E8HNC2hFWOhOfBSM9EZ45Dh4yGG4Kg7rIxIJzpuY7HdQELo5vvKvCLgeE1yoi8vCnpL2MQu9QvMV7mU0fszNogtx_nf0dlXoGPsniu2Hyb07o1s4K53XLNBH4x0RrMee2OfCK3iR0LXvGksOhfWeZjLcnvGy9iURBmLC75iLMbo8ZW-nVdDD3Rh-9sZNPgPP-SYk5kj-QYijT5Ze5yVc1-AZNuYP88Sc2Sqn3zo_bIt6LNPUntw3-Lw9_kxdehyT_k2SJ2m44yzhYvAxMdDbI2rKO5zkBj6yoLQYtSwGU04n9nz8HyztFj0g9WQnK-hU1H1r0XEKOUcqECsUP8IDWO-P0QM3h1b8GpgEVpEeRcOKNRHjMOXM_XT-PXlmUwLI3yYnJpyRAAVGPv96-3ff__MbreMsce0WBRRwaXX4zXouDlrfmB6SotFOaIxpYM3s9WzJgBeMWPziqbdK_Trswk_tRfbY-hM48-KcnHF2k0E453h9WKrEmpXms3pPLm-Ixo3OzextN_shYCbXync_Ds0dTcCbkJft2vwntCdHpQKATiXFyKvyHi-V7sq9yWX4s4ZyCL5E1vhRNS1aFNsk6QQmGY8bflysSySpChLmi0rynGZ5_w6aCJa8xNIPWP8C8Hz7pOCvzQ84-Nxa5v_j3YqkC6nncp7dyXx_lM7EyHCzDdePH57epg1q6xZZks-w1VapklZZkWSz7pViUmVVYLni7SpBMeyzHhaVMu8SqpCIJ3JFU3oIsnSKl3kGc3noijrZVIlvOFNKXhDFgn2XKp5iKC5sftZPLVaVXmxKGeK16hcPEijVOMDxI-hx8i3M7uKUVcPe0cWiZLOu-9SvPQKV-2gRTwWivgfG_ET8rHDRiV7qQMawOOp2Bi6lw3_bLBq9eFFMB2_RV_-EwAA__8a2iFN">