Below is the valgrind output. Seem like it is OpenSSL's fault? Thus I am not
filling another bug report. Or can you do anything about it?

b.


==12933==
==12933== IN SUMMARY: 563339 errors from 307 contexts (suppressed: 69 from
1)
==12933==
==12933== malloc/free: in use at exit: 1,628 bytes in 44 blocks.
==12933== malloc/free: 25,390 allocs, 25,346 frees, 3,335,313 bytes
allocated.
==12933==
==12933== searching for pointers to 44 not-freed blocks.
==12933== checked 1,023,180 bytes.
==12933==
==12933==
==12933== 348 bytes in 30 blocks are definitely lost in loss record 2 of 3
==12933==    at 0x40237B9: malloc (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==12933==    by 0x4261D9A: default_malloc_ex (in
/usr/local/openssl-0.9.8l-1/lib/libcrypto.so.0.9.8)
==12933==
==12933== LEAK SUMMARY:
==12933==    definitely lost: 348 bytes in 30 blocks.
==12933==      possibly lost: 0 bytes in 0 blocks.
==12933==    still reachable: 1,280 bytes in 14 blocks.
==12933==         suppressed: 0 bytes in 0 blocks.
==12933== Reachable blocks (those to which a pointer was found) are not
shown.
==12933== To see them, rerun with: --leak-check=full --show-reachable=yes
--12933--  memcheck: sanity checks: 165 cheap, 8 expensive
--12933--  memcheck: auxmaps: 0 auxmap entries (0k, 0M) in use
--12933--  memcheck: auxmaps_L1: 0 searches, 0 cmps, ratio 0:10
--12933--  memcheck: auxmaps_L2: 0 searches, 0 nodes
--12933--  memcheck: SMs: n_issued      = 102 (1632k, 1M)
--12933--  memcheck: SMs: n_deissued    = 9 (144k, 0M)
--12933--  memcheck: SMs: max_noaccess  = 65535 (1048560k, 1023M)
--12933--  memcheck: SMs: max_undefined = 3 (48k, 0M)
--12933--  memcheck: SMs: max_defined   = 737 (11792k, 11M)
--12933--  memcheck: SMs: max_non_DSM   = 98 (1568k, 1M)
--12933--  memcheck: max sec V bit nodes:    1189 (60k, 0M)
--12933--  memcheck: set_sec_vbits8 calls: 167151 (new: 1189, updates:
165962)
--12933--  memcheck: max shadow mem size:   1932k, 1M
--12933-- translate:            fast SP updates identified: 83,889 ( 93.1%)
--12933-- translate:   generic_known SP updates identified: 4,337 (  4.8%)
--12933-- translate: generic_unknown SP updates identified: 1,816 (  2.0%)
--12933--     tt/tc: 87,945 tt lookups requiring 121,849 probes
--12933--     tt/tc: 87,945 fast-cache updates, 4 flushes
--12933--  transtab: new        28,388 (755,681 -> 12,187,193; ratio 161:10)
[0 scs]
--12933--  transtab: dumped     0 (0 -> ??)
--12933--  transtab: discarded  186 (3,146 -> ??)
--12933-- scheduler: 16,567,751 jumps (bb entries).
--12933-- scheduler: 165/111,191 major/minor sched events.
--12933--    sanity: 166 cheap, 8 expensive checks.
--12933--    exectx: 12,289 lists, 11,746 contexts (avg 0 per list)
--12933--    exectx: 614,084 searches, 611,160 full compares (995 per 1000)
--12933--    exectx: 1,029,878 cmp2, 839,523 cmp4, 0 cmpAll
--12933--  errormgr: 318 supplist searches, 318 comparisons during search
--12933--  errormgr: 563,408 errlist searches, 2,219,261 comparisons during
search


On 21 February 2010 14:51, Pierre Joye <pierre....@gmail.com> wrote:

> hi,
>
> can you run it through valgrind and paste the output in a new bug report
> please?
>
> Cheers,
>
> On Sun, Feb 21, 2010 at 2:47 AM, Bostjan Skufca <bost...@a2o.si> wrote:
> > a) If you would like to see an example of memory leak, here is how I
> > reproduce it.
> >
> > 1. Clone this git repository:
> > http://github.com/bostjan/PHP-application-server
> >
> > 2. Copy/move/Symlink contents to /opt/daemons/AppSrv
> >
> > 3. cd to /opt/daemons/AppSrv/demos/demo_https
> >
> > 4. start the daemon: ./demo -d5
> > - binds and listens on port 30000
> > - does not fork into background
> > 7. execute ./client_openssl_nocert
> >
> > 5. with another shell go to: /opt/daemons/AppSrv/demos/demo_https
> >
> > 6. execute this: while (true); do ./client_curl; done
> >
> > 7. start another shell and watch increasing residental memory of PHP
> > server process
> >
> >
> >
> > b) If you would like to see an example of stale openssl_x509 resource
> > bug, here is how I reproduce it.
> > Follow the steps 1-5 above
> >
> > 6. execute ./client_openssl
> > - make some input, double return
> > - watch at server console how correct CN appears two times
> >
> > 7. execute ./client_openssl_nocert
> > - watch at server console how STALE CN from previous connection appears
> >
> > 8. execute ./client_openssl_nocert
> > - and the bug is gone to hiding
> >
> > 9. If you repeat steps 6-8 bug reappears/redissapears.
> >
> >
> >
> > I hope this helps,
> > b.
> >
> >
> >
> > On 21 February 2010 01:45, Bostjan Skufca <bost...@a2o.si> wrote:
> >> The patch includes code which is very similar but it's functionality
> >> goes just the other way around.
> >>
> >> The original code takes remote CN and if that contains asterisk, it
> >> tries to 'limited-wildcard-match' of CN_match against remote CN
> >> (remote CN is the pattern in this case, if you will).
> >>
> >> On the other hand, added code checks if CN_match contains asterisk and
> >> if so, it does 'limited-wildcard-match' of REMOTE CN against CN_match
> >> pattern.
> >>
> >>
> >> The original version 'could' be enough if you are only considering PHP
> >> as a SSL client.
> >>
> >>
> >> Now, what I am trying to achieve is a whole standalone application
> >> server written in PHP. That is, whole forking/process management etc
> >> stuff. And I would like to set it up like this:
> >> - it has a SSL listening socket
> >> - set CN_match for listening socket to '*.example.org'
> >> - create listening socket with stream_socket_server
> >> All above in order to accept connections only from clients which
> >> present themselves with appropriate certificate (based on cacert check
> >> which works OK) and appropriate CN.
> >>
> >> To illustrate the desired functionality:
> >> - CNs host1.example.org and host2.example.org are OK,
> >> - but not CN host3.otherdomain.org, even if it presents a certificate
> >> from the same CA as the two above.
> >>
> >>
> >> Was I clear enough now? :)
> >> b.
> >>
> >>
> >>
> >> PS: I've just discovered another issue. In the context of creating
> >> listening socket with stream_socket_create, again.
> >>
> >> If a preceeding SSL client has introduced itself with client
> >> certificate, and the current client does not, the
> >> [ssl][peer_certificate] of the new socket's context options still
> >> contains a reference to a resource of preceeding client's certificate.
> >> Later, subsequent client connections without certificate do not
> >> exhibit the same behaviour.
> >> If the pattern reoccurs (... ---> client-with-cert  ---> followed by
> >> client-without-cert), the story repeats.
> >>
> >> There is also a memory leak in this - when I looped the client to
> >> establish hundreds of sequential SSL connections, the residental
> >> memory footprint of php server process was ever increasing. When I
> >> switched my App server to HTTP protocol and repeated the test the
> >> memory leak was not present anymore. And I did openssl_x509_free()
> >> call on peer_certificate resource upon client disconnect.
> >>
> >>
> >>
> >>
> >>
> >> On 21 February 2010 00:05, Pierre Joye <pierre....@gmail.com> wrote:
> >>> hi,
> >>>
> >>> Is it not suppose to work already? As your patch basically does what
> >>> is done earlier in the code if match fails. If there is a bug in this
> >>> area, we should fix instead of adding the same thing later :)
> >>>
> >>> I will check this issue next week.
> >>>
> >>> Btw, there is no chance to get this in 5.2.13 or 5.3.2 at this stage,
> >>> it is too late in the process.
> >>>
> >>> Thanks for your work!
> >>>
> >>> Cheers,
> >>>
> >>> On Sat, Feb 20, 2010 at 8:56 PM, Bostjan Skufca <bost...@a2o.si>
> wrote:
> >>>> Hi!
> >>>>
> >>>> I've created a patch that enables PHP to do "limited wildcard
> >>>> matching" if CN_match option in stream context is specified as
> >>>> '*.example.org'.
> >>>> Also I have filled a bug report for this, here:
> >>>> http://bugs.php.net/bug.php?id=51100
> >>>>
> >>>> Patch is here:
> >>>> http://source.a2o.si/php/php-ext-openssl-CN_match-wildcard.diff
> >>>>
> >>>> It was made against 5.2.12 but I checked it with SVN:
> >>>> - for 5.2 branch the offset is only +6 lines
> >>>> - for trunk it is cca +800 lines
> >>>>
> >>>> Can you include it in 5.2.13 release and 5.3? I know the former is
> >>>> already in RC stage but this does can't break anything I believe.
> >>>>
> >>>> Best regards,
> >>>> b.
> >>>>
> >>>> --
> >>>> PHP Internals - PHP Runtime Development Mailing List
> >>>> To unsubscribe, visit: http://www.php.net/unsub.php
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >>> --
> >>> Pierre
> >>>
> >>> @pierrejoye | http://blog.thepimp.net | http://www.libgd.org
> >>>
> >>
> >
>
>
>
> --
> Pierre
>
> @pierrejoye | http://blog.thepimp.net | http://www.libgd.org
>

Reply via email to