If write support for the underlying device is disabled (e.g. by disabling CONFIG_MCI_WRITE), blk->ops->write will be NULL. Unconditionally dereferencing/calling blk->ops->write() results in a NULL pointer dereference.
Fix this by making chunk_flush() a noop for missing write support. Don't return an error since there should be nothing to flush if write support is disabled, anyway. Note that barebox currently does not prevent calling write/flush operations, even if CONFIG_MCI_WRITE and thus write support is actually disabled. But this should be handled on another level. Signed-off-by: Enrico Jörns <[email protected]> --- common/block.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/common/block.c b/common/block.c index ca2ed37dbd..abd05eab39 100644 --- a/common/block.c +++ b/common/block.c @@ -60,6 +60,9 @@ static int chunk_flush(struct block_device *blk, struct chunk *chunk) if (!chunk->dirty) return 0; + if (!blk->ops->write) + return 0; + len = writebuffer_io_len(blk, chunk); ret = blk->ops->write(blk, chunk->data, chunk->block_start, len); if (ret < 0) -- 2.47.3
