qcacmn: Use qdf_timer shim for all kernel versions
qdf_timer_t has repeatedly been identified as a problem area by Control- Flow Integrity (CFI) analysis. This is because qdf_timer_init casts the callback from a signature taking a "void *" into one which takes an "unsigned long." While this "works," it is technically undefined behavior, and CFI is correct in flagging it. Unfortunately, CFI indicates the issue is with the callbacks themselves, which is incorrect. Using unsigned long as the callback parameter has a number serious drawbacks. Most significant is the fact that pointer size is not guaranteed to be the same size as an unsigned long on platforms other than Linux. For example, this is not the case on 64 bit Windows. As QDF is supposed to be a platform abstraction, it cannot use unsigned longs for memory addresses. Instead of casting the timer callback in qdf_timer_init, use a callback shim which takes an unsigned long, and handles the appropriate conversions needed to call the actual callback function. Change-Id: Id9149169f35f619f649934310a2a673a685690f0 CRs-Fixed: 2403021
Loading
Please register or sign in to comment