In the function free_subchunk(), after checking that subchu->post isn't NULL,
grub_memset() is called on subchu->pre->freebytes but it should be called on
subchu->post->freebytes. If subchu->pre is NULL but subchu->post isn't NULL,
then this could lead to a NULL pointer dereference.
Fixes: CID 473882
Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
Reviewed-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
if (subchu->post)
{
int off = subchu->start + subchu->size - fend;
- grub_memset (subchu->pre->freebytes,
- 0xff, sizeof (subchu->pre->freebytes) - off / 8);
- subchu->pre->freebytes[off / 8] |= ((1 << (8 - (off % 8))) - 1);
+ grub_memset (subchu->post->freebytes,
+ 0xff, sizeof (subchu->post->freebytes) - off / 8 - 1);
+ subchu->post->freebytes[sizeof (subchu->post->freebytes) - off / 8 - 1] |= ((1 << (8 - (off % 8))) - 1);
check_leftover (subchu->post);
}
#endif