Messages in this thread | | | Date | Fri, 10 Dec 2021 15:35:30 -0800 | From | Luis Chamberlain <> | Subject | Re: [PATCH v3] module: add in-kernel support for decompressing |
| |
On Fri, Dec 10, 2021 at 03:21:03PM -0800, Dmitry Torokhov wrote: > On Fri, Dec 10, 2021 at 02:05:17PM -0800, Luis Chamberlain wrote: > > On Thu, Dec 09, 2021 at 10:09:17PM -0800, Dmitry Torokhov wrote: > > > +static ssize_t module_xz_decompress(struct load_info *info, > > > + const void *buf, size_t size) > > > +{ > > > + static const u8 signature[] = { 0xfd, '7', 'z', 'X', 'Z', 0 }; > > > + struct xz_dec *xz_dec; > > > + struct xz_buf xz_buf; > > > + enum xz_ret xz_ret; > > > + size_t new_size = 0; > > > + ssize_t retval; > > > + > > > + if (size < sizeof(signature) || > > > + memcmp(buf, signature, sizeof(signature))) { > > > + pr_err("not an xz compressed module\n"); > > > + return -EINVAL; > > > + } > > > + > > > + xz_dec = xz_dec_init(XZ_DYNALLOC, (u32)-1); > > > + if (!xz_dec) > > > + return -ENOMEM; > > > + > > > + xz_buf.in_size = size; > > > + xz_buf.in = buf; > > > + xz_buf.in_pos = 0; > > > + > > > + do { > > > + struct page *page = module_get_next_page(info); > > > + if (!page) { > > > + retval = -ENOMEM; > > > + goto out; > > > + } > > > > This looks very similar to fw_decompress_xz_pages() on > > drivers/base/firmware_loader/main.c > > > > Is there any sharing possible with decompression between the two? > > Ideally we'd get proper crypto API allowing this (page by page) > decompression and then we can switch to it in both places and stop > calling into particular algorithms directly. Unfortunately this is not > something I can sign up for at this time. > > As it is I am not sure if it worth to try to split out XZ code and share > it between module and firmware loader.
Got it, makes sense.
What type of tests have you implemented for this ? kmod has quite a bit of tests. Can you add some for this?
Luis
| |