[ruby-core:64116] [ruby-trunk - Bug #10019] segmentation fault/buffer overrun in pack.c (encodes)

From: thoger@...
Date: 2014-07-29 07:55:49 UTC
List: ruby-core #64116
Issue #10019 has been updated by Tomas Hoger.


Nobuyoshi Nakada wrote:
> I couldn't reproduce it with that code, can you?

I can't, and I explained that the output of OpenSSL::HMAC.digest is way too short to fill or overflow buff[] in encodes().  It was added to make it possible for reporter to test if he can reproduce with it.  No crash on that should indicate no issue in pack/encodes.

Will's attached patches suggest that moving buff from stack to heap, or significantly reducing its size solved the problem.  Maybe 256 vs. 4096 is what makes a difference between exhausting and not exhausting all stack memory in his use case?

----------------------------------------
Bug #10019: segmentation fault/buffer overrun in pack.c (encodes)
https://bugs.ruby-lang.org/issues/10019#change-48127

* Author: Will Wood
* Status: Feedback
* Priority: Normal
* Assignee: 
* Category: core
* Target version: 
* ruby -v: ruby 2.1.2p168 (2014-07-06 revision 46721) [i386-mingw32]
* Backport: 2.0.0: REQUIRED, 2.1: DONE
----------------------------------------
While working with an AWS sample I hit a segmentation fault.  The same sample works under 1.9.3.  It appeared to be coming from pack.c function encodes.  After looking at the source there's a 4K buffer allocated on the stack.  I made a minor change to base the buffer length off of the incoming buffer length with a pad and allocate it off the heap.  Anyway, after fixing this my code sample runs fine.  I'm including a patch file and the sample code.

---Files--------------------------------
pack.patch (2.74 KB)
BucketTest.rb (326 Bytes)
pack.c.patch (769 Bytes)


-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next