summaryrefslogtreecommitdiffstats
path: root/results/scraper/launchpad-without-comments/1926246
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--results/scraper/launchpad-without-comments/192624650
1 files changed, 50 insertions, 0 deletions
diff --git a/results/scraper/launchpad-without-comments/1926246 b/results/scraper/launchpad-without-comments/1926246
new file mode 100644
index 00000000..f01a0a59
--- /dev/null
+++ b/results/scraper/launchpad-without-comments/1926246
@@ -0,0 +1,50 @@
+chrome based apps can not be run under qemu user mode
+
+chrome uses /proc/self/exe to fork render process.
+Here a simple code to reproduce the issue. It's output parent then child but failed with qemu: unknown option 'type=renderer'.
+
+Maybe we can modify exec syscall to replace /proc/self/exe to the real path.
+
+//gcc -o self self.c
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+int main(int argc, char** argv) {
+ if(argc==1){
+ printf ("parent\n");
+ if ( fork() == 0 )
+ {
+ return execl("/proc/self/exe","/proc/self/exe", "--type=renderer",NULL);
+ }
+ } else {
+ printf ("child\n");
+ }
+ return 0;
+}
+
+similar reports:
+https://github.com/AppImage/AppImageKit/issues/965
+https://github.com/golang/go/issues/42080
+
+Workardound:
+compile chrome or your chrome based app with a patch to content/common/child_process_host_impl.cc:GetChildPath, get the realpath of /proc/self/exe:
+
+diff --git a/content/common/child_process_host_impl.cc b/content/common/child_process_host_impl.cc
+index bc78aba80ac8..9fab74d3bae8 100644
+--- a/content/common/child_process_host_impl.cc
++++ b/content/common/child_process_host_impl.cc
+@@ -60,8 +60,12 @@ base::FilePath ChildProcessHost::GetChildPath(int flags) {
+ #if defined(OS_LINUX)
+ // Use /proc/self/exe rather than our known binary path so updates
+ // can't swap out the binary from underneath us.
+- if (child_path.empty() && flags & CHILD_ALLOW_SELF)
+- child_path = base::FilePath(base::kProcSelfExe);
++ if (child_path.empty() && flags & CHILD_ALLOW_SELF) {
++ if (!ReadSymbolicLink(base::FilePath(base::kProcSelfExe), &child_path)) {
++ NOTREACHED() << "Unable to resolve " << base::kProcSelfExe << ".";
++ child_path = base::FilePath(base::kProcSelfExe);
++ }
++ }
+ #endif
+
+ // On most platforms, the child executable is the same as the current \ No newline at end of file