Message ID | 20230224215019.3687-1-kunyu@nfschina.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | stm32: stm32-hash: Add kmalloc_array allocation check | expand |
On Sat, Feb 25, 2023 at 05:50:19AM +0800, Li kunyu wrote: > If rctx->hw_context allocation of the context pointer failed. Returning > -ENOMEM and assigning NULL to the out pointer should improve the > robustness of the function. > > Signed-off-by: Li kunyu <kunyu@nfschina.com> > --- > drivers/crypto/stm32/stm32-hash.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/crypto/stm32/stm32-hash.c b/drivers/crypto/stm32/stm32-hash.c > index d33006d43f76..18e79f62be96 100644 > --- a/drivers/crypto/stm32/stm32-hash.c > +++ b/drivers/crypto/stm32/stm32-hash.c > @@ -970,6 +970,10 @@ static int stm32_hash_export(struct ahash_request *req, void *out) > rctx->hw_context = kmalloc_array(3 + HASH_CSR_REGISTER_NUMBER, > sizeof(u32), > GFP_KERNEL); > + if (rctx->hw_context == NULL) { > + out = NULL; > + return -ENOMEM; > + } > > preg = rctx->hw_context; Shouldn't we free the hw_context at the end of the function? Why does it even need to be stored in rctx in the first place? Thanks,
On Sat, Feb 25, 2023 at 07:14:29AM +0800, Li kunyu wrote: > > hello senior: > 'rctx->hw_context' is a member of the rctx pointer array object and will pass 'memcpy(out, rctx, sizeof(*rctx)) at the end of the function; ', copied to the out pointer memory, it cannot be released, I think this patch does an allocation check on the 'rctx->hw_context' pointer should help a bit. Ugh that's completely broken. You can't export pointers. I guess this driver needs to be disabled. Thanks,
On Thu, Feb 23, 2023 at 10:33 AM Herbert Xu <herbert@gondor.apana.org.au> wrote: > On Sat, Feb 25, 2023 at 07:14:29AM +0800, Li kunyu wrote: > > > > hello senior: > > 'rctx->hw_context' is a member of the rctx pointer array object and will pass 'memcpy(out, rctx, sizeof(*rctx)) at the end of the function; ', copied to the out pointer memory, it cannot be released, I think this patch does an allocation check on the 'rctx->hw_context' pointer should help a bit. > > Ugh that's completely broken. You can't export pointers. > > I guess this driver needs to be disabled. Added Lionel to the To: line so he can look at this, I guess we should also add an entry to MAINTAINERS so that the reports come to the right address. Can we fix the actual problem? It seems to have been there since the initial submission in 2017. I guess the right fix is to export the *actual* hardware state into "out" and read it back from there instead of copying out the rctx struct. Also .statesize needs to be fixed to correspond to that. I can just use a roof:ed constant size for this. If Lionel does not have time to look at it I can try to come up with a quick fix. Yours, Linus Walleij
hello senior: 'rctx->hw_context' is a member of the rctx pointer array object and will pass 'memcpy(out, rctx, sizeof(*rctx)) at the end of the function; ', copied to the out pointer memory, it cannot be released, I think this patch does an allocation check on the 'rctx->hw_context' pointer should help a bit.
diff --git a/drivers/crypto/stm32/stm32-hash.c b/drivers/crypto/stm32/stm32-hash.c index d33006d43f76..18e79f62be96 100644 --- a/drivers/crypto/stm32/stm32-hash.c +++ b/drivers/crypto/stm32/stm32-hash.c @@ -970,6 +970,10 @@ static int stm32_hash_export(struct ahash_request *req, void *out) rctx->hw_context = kmalloc_array(3 + HASH_CSR_REGISTER_NUMBER, sizeof(u32), GFP_KERNEL); + if (rctx->hw_context == NULL) { + out = NULL; + return -ENOMEM; + } preg = rctx->hw_context;
If rctx->hw_context allocation of the context pointer failed. Returning -ENOMEM and assigning NULL to the out pointer should improve the robustness of the function. Signed-off-by: Li kunyu <kunyu@nfschina.com> --- drivers/crypto/stm32/stm32-hash.c | 4 ++++ 1 file changed, 4 insertions(+)