<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rpcd, branch master</title>
<subtitle>OpenWrt ubus RPC daemon</subtitle>
<id>https://git.openwrt.org/project/rpcd/atom?h=master</id>
<link rel='self' href='https://git.openwrt.org/project/rpcd/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/rpcd/'/>
<updated>2026-03-27T10:34:31Z</updated>
<entry>
<title>optimize by reusing timeout member</title>
<updated>2026-03-27T10:34:31Z</updated>
<author>
<name>Jo-Philipp Wich</name>
</author>
<published>2026-03-27T10:29:50Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/rpcd/commit/?id=5b078674a5929a5c90043c66721d45e1d8eae73d'/>
<id>urn:sha1:5b078674a5929a5c90043c66721d45e1d8eae73d</id>
<content type='text'>
Replace deferred_reply uloop_timeout with timeout reuse in both
rpc_exec_context and rpc_file_exec_context. This eliminates redundant
state tracking (deferred_reply_pending) and function pointers, reducing
struct sizes and code complexity while maintaining deferred reply
behavior through callback switching.

Signed-off-by: Jo-Philipp Wich &lt;jo@mein.io&gt;
</content>
</entry>
<entry>
<title>Merge pull request #27 from wildmeng/submit/defer-async-exec-reply</title>
<updated>2026-03-16T10:50:36Z</updated>
<author>
<name>Jo-Philipp Wich</name>
</author>
<published>2026-03-16T10:50:36Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/rpcd/commit/?id=a4a5a298588960638a2e1713eb8fb858e1dbedeb'/>
<id>urn:sha1:a4a5a298588960638a2e1713eb8fb858e1dbedeb</id>
<content type='text'>
exec: defer async reply teardown to avoid use-after-free</content>
</entry>
<entry>
<title>exec: defer async reply teardown to avoid use-after-free</title>
<updated>2026-03-16T09:34:41Z</updated>
<author>
<name>Meng</name>
</author>
<published>2026-03-16T08:58:36Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/rpcd/commit/?id=e655a0d69492a91d9dada74f0832e028e6b5367b'/>
<id>urn:sha1:e655a0d69492a91d9dada74f0832e028e6b5367b</id>
<content type='text'>
Async exec replies currently tear down their context directly from
ustream callbacks. When the callback chain keeps running after the
reply path frees the context, rpcd can hit a use-after-free and crash
with SIGSEGV.

Defer reply completion through a 0 ms uloop timeout and guard against
duplicate scheduling so cleanup runs after the callbacks unwind in both
exec paths.

Signed-off-by: Meng &lt;x.meng@genexis.eu&gt;
</content>
</entry>
<entry>
<title>rpc-sys: packagelist: increase input buffer size</title>
<updated>2026-02-05T10:49:51Z</updated>
<author>
<name>Eric Fahlgren</name>
</author>
<published>2026-01-27T16:56:37Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/rpcd/commit/?id=69b62b1990bc0257bd01342ea1710375fa0cce6d'/>
<id>urn:sha1:69b62b1990bc0257bd01342ea1710375fa0cce6d</id>
<content type='text'>
apk's installed database contains description lines that can be
up to 512 characters in content.  Adding the line prefix, "T:"
for descriptions, the newline and null terminator, we get a max
input of 516 characters.

If a description just happens to have more than 256 characters,
it will be read in two parts.  If that second part also happens
to have a valid prefix, like "g:", as its first two characters,
this would masquerade as valid tag and cause all sorts of mayhem.

We increase input line buffer to 516 to avoid this issue.

(This was originally left at 256 based upon the linked commit's
title, and a lack of consideration of the prefix and newline,
but examination of the code shows it should actually be 512.)

Link: https://gitlab.alpinelinux.org/alpine/apk-tools/-/commit/417a93ceae540444fdbd3f76d1dadf0e15621fdc
Signed-off-by: Eric Fahlgren &lt;ericfahlgren@gmail.com&gt;
Link: https://github.com/openwrt/rpcd/pull/25
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>file: provide user name and group name lookups for stat listings</title>
<updated>2025-12-03T21:48:31Z</updated>
<author>
<name>Paul Donald</name>
</author>
<published>2025-12-02T23:34:52Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/rpcd/commit/?id=ffb9961c1f8bc50830fdd4e144570f11062c2601'/>
<id>urn:sha1:ffb9961c1f8bc50830fdd4e144570f11062c2601</id>
<content type='text'>
This provides more user friendly information than numeric IDs.

Before this patch:

ubus call file list '{"path":"/proc"}'
...
{
	"name": "kcore",
	"type": "file",
	"size": 140737471586304,
	"mode": 33024,
	"atime": 1764716086,
	"mtime": 1764716086,
	"ctime": 1764716086,
	"inode": -268435271,
	"uid": 0,
	"gid": 0,
},
...

After this patch:

ubus call file list '{"path":"/proc"}'
...
{
	"name": "kcore",
	"type": "file",
	"size": 140737471586304,
	"mode": 33024,
	"atime": 1764716086,
	"mtime": 1764716086,
	"ctime": 1764716086,
	"inode": -268435271,
	"uid": 0,
	"gid": 0,
	"user": "root",
	"group": "root"
},
...

Tested on: OpenWrt SNAPSHOT r32139-1f879b8839 / 6.12.59
Signed-off-by: Paul Donald &lt;newtwen+github@gmail.com&gt;
Link: https://github.com/openwrt/rpcd/pull/22
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>file: bump sz_size to 64 bits</title>
<updated>2025-12-03T21:48:31Z</updated>
<author>
<name>Paul Donald</name>
</author>
<published>2025-12-02T23:13:14Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/rpcd/commit/?id=a284e7751fa76a0a9a5db3893e8abf335da89aaf'/>
<id>urn:sha1:a284e7751fa76a0a9a5db3893e8abf335da89aaf</id>
<content type='text'>
Some systems reveal /proc/kcore which for 64 bit systems has a size of

140,737,471,586,304 bytes.

This is a virtual mapping of the maximum possible RAM in a system. But if a 32
bit value tries to hold this, it is displayed as the erroneous value

-16,769,024 bytes

Bump the size to 64 bits to hold the correct value (and correct values for large
files).

Before this patch:

ubus call file list '{"path":"/proc"}'
...
{
	"name": "kcore",
	"type": "file",
	"size": -16769024,
	"mode": 33024,
	"atime": 1764716086,
	"mtime": 1764716086,
	"ctime": 1764716086,
	"inode": -268435271,
	"uid": 0,
	"gid": 0,
},
...

After this patch:

ubus call file list '{"path":"/proc"}'
...
{
	"name": "kcore",
	"type": "file",
	"size": 140737471586304,
	"mode": 33024,
	"atime": 1764716086,
	"mtime": 1764716086,
	"ctime": 1764716086,
	"inode": -268435271,
	"uid": 0,
	"gid": 0,
},
...

Tested on: OpenWrt SNAPSHOT r32139-1f879b8839 / 6.12.59
Signed-off-by: Paul Donald &lt;newtwen+github@gmail.com&gt;
Link: https://github.com/openwrt/rpcd/pull/22
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>file: append "target" for symbolic links</title>
<updated>2025-11-10T14:14:21Z</updated>
<author>
<name>Paul Donald</name>
</author>
<published>2025-11-09T15:11:46Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/rpcd/commit/?id=483263c7b0cd3922b93be2cf9dad5eeccbb9fedb'/>
<id>urn:sha1:483263c7b0cd3922b93be2cf9dad5eeccbb9fedb</id>
<content type='text'>
When list encounters a symbolic link, we add its nested "target" entry, to where
the symbolic link points. Just how `ls -l` reports.

So when calling e.g.: ubus call file list '{"path":"/etc"}'

instead of:

	...
	"name": "os-release",
	"type": "symlink",
	"size": 21,
	"mode": 41471,
	"atime": 1760891865,
	"mtime": 1760891865,
	"ctime": 1760891865,
	"inode": 266,
	"uid": 0,
	"gid": 0,
	"target_type": "file"
	...

We get:

	...
	"name": "os-release",
	"type": "symlink",
	"size": 21,
	"mode": 41471,
	"atime": 1760891865,
	"mtime": 1760891865,
	"ctime": 1760891865,
	"inode": 266,
	"uid": 0,
	"gid": 0,
	"target": {
		"name": "../usr/lib/os-release",
		"type": "file",
		"size": 582,
		"mode": 33188,
		"atime": 1760891865,
		"mtime": 1760891865,
		"ctime": 1760891865,
		"inode": 1744,
		"uid": 0,
		"gid": 0
	}
	...

And should a link be broken:

	"name": "foo",
	"type": "symlink",
	"size": 8,
	"mode": 41471,
	"atime": 1762640365,
	"mtime": 1762640365,
	"ctime": 1762640365,
	"inode": 348,
	"uid": 0,
	"gid": 0,
	"target": {
		"name": "/tmp/foo",
		"type": "broken"
	}

Tested on: OpenWrt 24.10.4 r28959-29397011cc
Signed-off-by: Paul Donald &lt;newtwen+github@gmail.com&gt;
Tested-by: Eric Fahlgren &lt;ericfahlgren@gmail.com&gt;
Link: https://github.com/openwrt/rpcd/pull/21
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>iwinfo: add he and eht operation info to wifi scan</title>
<updated>2025-11-07T11:21:58Z</updated>
<author>
<name>Aleksander Jan Bajkowski</name>
</author>
<published>2025-03-15T16:03:33Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/rpcd/commit/?id=917000075eb48c934f0a456be3b884758c376e0b'/>
<id>urn:sha1:917000075eb48c934f0a456be3b884758c376e0b</id>
<content type='text'>
Iwinfo exports he and eht operation info useful to get channel info of
nearby stations. Add these new info to ubus output.

Signed-off-by: Aleksander Jan Bajkowski &lt;olek2@wp.pl&gt;
Link: https://github.com/openwrt/rpcd/pull/11
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>file: use lstat for file list (instead of stat) to reveal links</title>
<updated>2025-10-30T11:07:04Z</updated>
<author>
<name>Paul Donald</name>
</author>
<published>2025-06-11T21:52:01Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/rpcd/commit/?id=11e0bee504c643e94e54ad6b66185a0164842a5c'/>
<id>urn:sha1:11e0bee504c643e94e54ad6b66185a0164842a5c</id>
<content type='text'>
I don't think there was a conscious design choice for stat(), but it is
documented that the 'type' entry using the rpcd file mechanisms can be
'symlink' but this is never the case using stat().

lstat and stat are virtually identical, but that lstat reports that
a symlink entry is a symlink, whereas stat reports that a symlink entry
is a file (the file it points to) and info about the link target
instead.

Someone parsing a directory using stat() would never know about links.

Using lstat, we can see whether an entry is a symlink for no extra cost.
When the file list encounters a link entry, it now includes the element
"target_type" which contains the link target type: "file", "directory"
etc - or "broken" if the link is broken - via one additional stat call.

So when calling e.g.: ubus call file list '{"path":"/etc"}'

instead of:

	...
	"name": "os-release",
	"type": "file",
	"size": 610,
	"mode": 33188,
	"atime": 1749462226,
	"mtime": 1749462226,
	"ctime": 1749462226,
	"inode": 894,
	"uid": 0,
	"gid": 0
	...

We get:

	...
	"name": "os-release",
	"type": "symlink",
	"size": 21,
	"mode": 41471,
	"atime": 1749462226,
	"mtime": 1749462226,
	"ctime": 1749462226,
	"inode": 234,
	"uid": 0,
	"gid": 0,
	"target_type": "file"
	...

Moved the type determination out of _rpc_file_add_stat to a new function
_get_stat_type for re-usability in the if (S_ISLNK(s.st_mode)) block.

Tested on: openwrt main

Signed-off-by: Paul Donald &lt;newtwen+github@gmail.com&gt;
Tested-by: Eric Fahlgren &lt;ericfahlgren@gmail.com&gt;
Link: https://github.com/openwrt/rpcd/pull/13
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>CMakeLists: update cmake minimum required version to 3.10</title>
<updated>2025-10-03T21:35:08Z</updated>
<author>
<name>Christian Marangi</name>
</author>
<published>2025-10-03T21:35:08Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/rpcd/commit/?id=cfb93f105ca2b5e81c5e489076f38d5786f346ea'/>
<id>urn:sha1:cfb93f105ca2b5e81c5e489076f38d5786f346ea</id>
<content type='text'>
New cmake version 4.0 requires at least 3.5 version as the minimum
required version with it increased to 3.10 in to-be-released cmake
versions.

Set the minimum required version to 3.10 to future-proof for future
cmake version.

Suggested-by: Hannu Nyman &lt;hannu.nyman@iki.fi&gt;
Signed-off-by: Christian Marangi &lt;ansuelsmth@gmail.com&gt;
</content>
</entry>
</feed>
