This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [gold patch] Fix check for fallocate failure


Cary Coutant <ccoutant@google.com> writes:

> The posix_fallocate() routine returns an errno code directly and does
> not set errno. Gold checks for a negative return value to indicate
> failure, misses the failure, and ends up seg faulting when it tries to
> write past the end of the available space. This patch fixes the check.
>
> Tested on x86_64, with a tmpfs file system too small for the output file.

As long as you are looking at this you also need to fix the
implementation of posix_fallocate for systems that don't have it, near
the top of output.cc.

Ian


> 2011-10-12  Cary Coutant  <ccoutant@google.com>
>
> 	* gold/output.cc (Output_file::map_no_anonymous): Check for non-zero
> 	return code from posix_fallocate.
>
>
> commit 8cbae59d553fa09d23c1461e7f65fb18c5cdcde0
> Author: Cary Coutant <ccoutant@google.com>
> Date:   Wed Oct 12 22:43:56 2011 -0700
>
>     Fix check of posix_fallocate return value.
>
> diff --git a/gold/output.cc b/gold/output.cc
> index 7b272e8..949d9ef 100644
> --- a/gold/output.cc
> +++ b/gold/output.cc
> @@ -5075,8 +5075,12 @@ Output_file::map_no_anonymous(bool writable)
>    // output file will wind up incomplete, but we will have already
>    // exited.  The alternative to fallocate would be to use fdatasync,
>    // but that would be a more significant performance hit.
> -  if (writable && ::posix_fallocate(o, 0, this->file_size_) < 0)
> -    gold_fatal(_("%s: %s"), this->name_, strerror(errno));
> +  if (writable)
> +    {
> +      int err = ::posix_fallocate(o, 0, this->file_size_);
> +      if (err != 0)
> +	gold_fatal(_("%s: %s"), this->name_, strerror(err));
> +    }
>
>    // Map the file into memory.
>    int prot = PROT_READ;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]