From 6da56acf4b54e9a8a073277495b81a1f97d0681b Mon Sep 17 00:00:00 2001 From: Jan Polensky Date: Thu, 16 Oct 2025 19:01:15 +0200 Subject: [PATCH] dump2tar: Use readlinkat() unconditionally in read_symlink() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the readlink() branch with readlinkat() and normalize parameters: use AT_FDCWD with filename when relname is NULL. This removes duplicate code paths while preserving behavior, including the growth loop and size limits. readlinkat() is a superset of readlink(). Reviewed-by: Jan Höppner Signed-off-by: Jan Polensky Signed-off-by: Jan Höppner --- dump2tar/src/dump.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/dump2tar/src/dump.c b/dump2tar/src/dump.c index 0f6ef413..7bf759f8 100644 --- a/dump2tar/src/dump.c +++ b/dump2tar/src/dump.c @@ -655,16 +655,18 @@ static int read_symlink(struct task *task, const char *filename, task->opts->read_chunk_size; int rc = EXIT_OK; + /* If @relname is NULL, use @filename with AT_FDCWD. */ + if (!relname) { + relname = filename; + dirfd = AT_FDCWD; + } + while (!is_aborted(task)) { buffer_make_room(buffer, currlen, false, task->opts->max_buffer_size); cancel_enable(); - if (relname) - actual = readlinkat(dirfd, relname, buffer->addr, - buffer->size); - else - actual = readlink(filename, buffer->addr, buffer->size); + actual = readlinkat(dirfd, relname, buffer->addr, buffer->size); cancel_disable(); if (actual == -1) {