bcachefs: Switch to unsafe_memcpy() in a few places
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 6 Oct 2023 17:47:31 +0000 (13:47 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:10:16 +0000 (17:10 -0400)
The new fortify checking doesn't work for us in all places; this
switches to unsafe_memcpy() where appropriate to silence a few
warnings/errors.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/buckets.c
fs/bcachefs/extents.h

index 46b6406d772b2216e686b6df1a7c772aab0bebdf..a1a4b5feadaa2cf36fc3b0657241efc464b6faab 100644 (file)
@@ -473,8 +473,9 @@ static inline int update_replicas_list(struct btree_trans *trans,
        d = trans->fs_usage_deltas;
        n = (void *) d->d + d->used;
        n->delta = sectors;
-       memcpy((void *) n + offsetof(struct replicas_delta, r),
-              r, replicas_entry_bytes(r));
+       unsafe_memcpy((void *) n + offsetof(struct replicas_delta, r),
+                     r, replicas_entry_bytes(r),
+                     "flexible array member embedded in strcuct with padding");
        bch2_replicas_entry_sort(&n->r);
        d->used += b;
        return 0;
index 7ee8d031bb6c50c809114107dbf79c7aadc17bf7..db1863165d62cbaef959d4f0cdaee8525ef6f312 100644 (file)
@@ -642,9 +642,11 @@ static inline void bch2_bkey_append_ptr(struct bkey_i *k, struct bch_extent_ptr
 
                ptr.type = 1 << BCH_EXTENT_ENTRY_ptr;
 
-               memcpy((void *) &k->v + bkey_val_bytes(&k->k),
-                      &ptr,
-                      sizeof(ptr));
+               unsafe_memcpy((void *) &k->v + bkey_val_bytes(&k->k),
+                             &ptr,
+                             sizeof(ptr),
+                             "Our memcpy target is relative to a zero size array ,"
+                             "compiler bounds checking doesn't work here");
                k->k.u64s++;
                break;
        default: