> On Oct 16, 2023, at 10:46 PM, Eric Biggers <ebiggers@xxxxxxxxxx> wrote: > > 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; I was thinking about hard-coding the alignment requirement. __alignof__ is much better. Thanks for the suggestion! Song