| Summary: | minor memory leak during channel_init_channels() | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Portable OpenSSH | Reporter: | Markus <markus> | ||||
| Component: | ssh | Assignee: | Assigned to nobody <unassigned-bugs> | ||||
| Status: | CLOSED FIXED | ||||||
| Severity: | trivial | CC: | ahmedsayeed1982, djm, markus | ||||
| Priority: | P5 | ||||||
| Version: | 7.9p1 | ||||||
| Hardware: | ix86 | ||||||
| OS: | All | ||||||
| Bug Depends on: | |||||||
| Bug Blocks: | 2915 | ||||||
| Attachments: |
|
||||||
Good catch - thanks! I've committed this and it will be in the openssh-8.0 release. Move resolved bugs -> CLOSED after 8.0 release [spam removed] |
Created attachment 3208 [details] patch to fix memory leak Note: This is my first contribution to the openssh source and I'm porting my findings from a macOS/Windows port back to the original source. So please be gentle with my possible wrongdoings and errors. In any case, I think this should be pretty straightforward: In channels.c there is the channel_init_channels() function, which initially callocates memory for the sc structure and immediately also callocates and fills the sc->channel_pre and sc->channel_post pointer members. Then, after a few lines of code, it finally calls the channel_handler_init(sc) function. Now, the channel channel_handler_init() also callocates memory for pre and post and finally assigns its pointers into the sc struct pointer members. sc->channel_pre = pre; sc->channel_post = post; However, at this point, sc->channel_pre and sc->channel_post are already filled with the pointers to the memory blocks which channel_init_channels() had allocated. Thus these pointers get lost and the memory blocks leak. Proposal: don't have chanell_init_channel() allocate these. Let channel_init_channels() do it. A patch is attached.