u32 total = le32_to_cpu(regf->total_hbin_size);
u32 offs = le32_to_cpu(offset);
const struct cell *cell;
- s32 actual_size;
+ u32 actual_size;
if ((offs > total) || (offs & 7) || (wanted_size > total - offs))
return NULL;
cell = (const struct cell *)®f->hbin_area[offs];
- actual_size = le32_to_cpu(cell->size);
- if (actual_size >= 0) /* Cell not in use? */
+ actual_size = -le32_to_cpu(cell->size);
+ if (actual_size > INT32_MAX) /* Cell unused, or size was INT32_MIN? */
return NULL;
- if (wanted_size > -actual_size) /* Cell too small? */
+ if (wanted_size > actual_size) /* Cell too small? */
return NULL;
return cell;
}
if (names_equal(ctx->key_name, ctx->key_name_nchars,
sub_nk->name, le16_to_cpu(sub_nk->name_size),
- (sub_nk->flags & NK_COMPRESSED_NAME)))
+ (sub_nk->flags & NK_COMPRESSED_NAME) != 0))
{
ctx->result = sub_nk;
return HIVE_ITERATION_STOPPED;
if (names_equal(value_uname, value_uname_nchars,
vk->name, name_size,
- (vk->flags & VK_COMPRESSED_NAME)))
+ (vk->flags & VK_COMPRESSED_NAME) != 0))
{
*vk_ret = vk;
status = HIVE_OK;