Bug 2211220
| Summary: | clang TSA does not analyze across function pointers | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 9 | Reporter: | Stefan Hajnoczi <stefanha> |
| Component: | clang | Assignee: | Timm Bäder <tbaeder> |
| Status: | ASSIGNED --- | QA Contact: | Jesus Checa <jchecahi> |
| Severity: | unspecified | Docs Contact: | |
| Priority: | high | ||
| Version: | 9.2 | CC: | jchecahi, kwolf, marcandre.lureau, mprchlik, pbonzini, sipoyare, tbaeder, tstellar |
| Target Milestone: | rc | Keywords: | Triaged |
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | If docs needed, set a value | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | Type: | Bug | |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
|
Description
Stefan Hajnoczi
2023-05-30 19:47:01 UTC
Can you give an example of this pattern in the source code? I assume the called function pointer can have more than one possible value, which is not the case in the posted reproducer? The most common case of this in real world QEMU code (which is where the request comes from) is structs of function pointers that basically serve as a vtable for objects that point at them. For example given a BlockDriverState *bs, we'd call something like bs->drv->bdrv_co_preadv(), which could then be raw_co_preadv() or vmdk_co_preadv() depending on the image format of the disk image we're looking at. The other relevant case is where we pass a callback to a function and want to annotate that the lock is held when calling the callback. |