On Mon, Oct 16, 2023 at 10:35:16PM -0700, Song Liu wrote: > On Mon, Oct 16, 2023 at 8:12 PM Eric Biggers <ebiggers@xxxxxxxxxx> wrote: > > > > On Mon, Oct 16, 2023 at 01:10:40PM -0700, Song Liu wrote: > > > On Sun, Oct 15, 2023 at 12:07 AM Eric Biggers <ebiggers@xxxxxxxxxx> wrote: > > > > > > > [...] > > > > > + */ > > > > > +__bpf_kfunc int bpf_get_fsverity_digest(struct file *file, struct bpf_dynptr_kern *digest_ptr) > > > > > +{ > > > > > + const struct inode *inode = file_inode(file); > > > > > + struct fsverity_digest *arg = digest_ptr->data; > > > > > > > > What alignment is guaranteed here? > > > > > > drnptr doesn't not provide alignment guarantee for digest_ptr->data. > > > If we need alignment guarantee, we need to add it here. > > > > So technically it's wrong to cast it to struct fsverity_digest, then. > > We can enforce alignment here. Would __aligned(2) be sufficient? > Do you mean something like the following: if (!IS_ALIGNED((uintptr_t)digest_ptr->data, __alignof__(*arg))) return -EINVAL;