On Thu, Oct 21, 2021 at 11:40 AM Toke Høiland-Jørgensen [off-list ref] wrote:
+ map_type = READ_ONCE(array->aux->type);
+ if (!map_type) {
+ /* There's no owner yet where we could check for compatibility.
+ * Do an atomic swap to prevent racing with another invocation
+ * of this branch (via simultaneous map_update syscalls).
*/
- array->aux->type = fp->type;
- array->aux->jited = fp->jited;
+ if (cmpxchg(&array->aux->type, 0, prog_type))
+ return false;
Other fields might be used in the compatibility check in the future.
This hack is too fragile.
Just use a spin_lock.