Re: [REGRESSION] coredumps truncated after "new helper: dump_align()"

Joe Perches
2013-11-15T20:58:16Z

On Fri, 2013-11-15 at 20:38 +0000, Al Viro wrote:
> On Fri, Nov 15, 2013 at 03:26:10PM +0100, Peter Wu wrote:
> > Somewhere in the merge window of 3.13, coredumps appear truncated.
> > Instead of 319488 bytes, I get 868 bytes (tested with x86_64 only).
> >
> > The latest Linus' master (v3.12-9579-g049ffa8) is still affected.
> > Bisection leads to:
> >
> > commit 22a8cb8248ba5d340307ba72432253b1dbdb5cf7

trivia:

> diff --git a/fs/coredump.c b/fs/coredump.c
[]
> @@ -733,7 +733,7 @@ int dump_align(struct coredump_params *cprm, int align)
> {
> unsigned mod = cprm->written & (align - 1);
> if (align & (align - 1))
> - return -EINVAL;
> - return mod ? dump_skip(cprm, align - mod) : 0;
> + return 0;
> + return mod ? dump_skip(cprm, align - mod) : 1;
> }
> EXPORT_SYMBOL(dump_align);

extern int dump_skip(struct coredump_params *cprm, size_t nr);
extern int dump_emit(struct coredump_params *cprm, const void *addr, int nr);
extern int dump_align(struct coredump_params *cprm, int align);

Perhaps all of these should return bool not int.
Is there a reason these should be EXPORT_SYMBOL?