[lld] r191403 - [ELF] Fix use after free.
Michael Spencer
bigcheesegs at gmail.com
Thu Sep 26 16:43:14 PDT 2013
On Thu, Sep 26, 2013 at 4:08 PM, Sean Silva <silvas at purdue.edu> wrote:
> asan?
>
Nope, just Windows debug allocator clearing memory on free.
- Michael Spencer
>
>
> On Wed, Sep 25, 2013 at 6:12 PM, Michael J. Spencer <bigcheesegs at gmail.com
> > wrote:
>
>> Author: mspencer
>> Date: Wed Sep 25 17:12:14 2013
>> New Revision: 191403
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=191403&view=rev
>> Log:
>> [ELF] Fix use after free.
>>
>> Modified:
>> lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
>> lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
>>
>> Modified: lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h?rev=191403&r1=191402&r2=191403&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h (original)
>> +++ lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h Wed Sep 25
>> 17:12:14 2013
>> @@ -156,7 +156,7 @@ public:
>> virtual void setNoAllowDynamicLibraries() { _noAllowDynamicLibraries =
>> true; }
>>
>> /// Searches directories for a match on the input File
>> - llvm::ErrorOr<std::string>
>> + llvm::ErrorOr<StringRef>
>> searchLibrary(StringRef libName,
>> const std::vector<StringRef> &searchPath) const;
>>
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp?rev=191403&r1=191402&r2=191403&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp Wed Sep 25
>> 17:12:14 2013
>> @@ -149,48 +149,49 @@ ELFLinkingContext::create(llvm::Triple t
>> }
>> }
>>
>> -llvm::ErrorOr<std::string> ELFLinkingContext::searchLibrary(
>> +llvm::ErrorOr<StringRef> ELFLinkingContext::searchLibrary(
>> StringRef libName, const std::vector<StringRef> &searchPath) const {
>> bool foundFile = false;
>> StringRef pathref;
>> + SmallString<128> path;
>> for (StringRef dir : searchPath) {
>> // Search for dynamic library
>> if (!_isStaticExecutable) {
>> - SmallString<128> dynlibPath;
>> + path.clear();
>> if (dir.startswith("=/")) {
>> - dynlibPath.assign(_sysrootPath);
>> - dynlibPath.append(dir.substr(1));
>> + path.assign(_sysrootPath);
>> + path.append(dir.substr(1));
>> } else {
>> - dynlibPath.assign(dir);
>> + path.assign(dir);
>> }
>> - llvm::sys::path::append(dynlibPath, Twine("lib") + libName +
>> ".so");
>> - pathref = dynlibPath.str();
>> + llvm::sys::path::append(path, Twine("lib") + libName + ".so");
>> + pathref = path.str();
>> if (llvm::sys::fs::exists(pathref)) {
>> foundFile = true;
>> }
>> }
>> // Search for static libraries too
>> if (!foundFile) {
>> - SmallString<128> archivefullPath;
>> + path.clear();
>> if (dir.startswith("=/")) {
>> - archivefullPath.assign(_sysrootPath);
>> - archivefullPath.append(dir.substr(1));
>> + path.assign(_sysrootPath);
>> + path.append(dir.substr(1));
>> } else {
>> - archivefullPath.assign(dir);
>> + path.assign(dir);
>> }
>> - llvm::sys::path::append(archivefullPath, Twine("lib") + libName +
>> ".a");
>> - pathref = archivefullPath.str();
>> + llvm::sys::path::append(path, Twine("lib") + libName + ".a");
>> + pathref = path.str();
>> if (llvm::sys::fs::exists(pathref)) {
>> foundFile = true;
>> }
>> }
>> if (foundFile)
>> - return (*(new (_alloc) std::string(pathref.str())));
>> + return StringRef(*new (_alloc) std::string(pathref));
>> }
>> if (!llvm::sys::fs::exists(libName))
>> return llvm::make_error_code(llvm::errc::no_such_file_or_directory);
>>
>> - return std::string(libName);
>> + return libName;
>> }
>>
>> std::unique_ptr<File> ELFLinkingContext::createUndefinedSymbolFile() {
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130926/4eca421d/attachment.html>
More information about the llvm-commits
mailing list