All of lore.kernel.org
 help / color / mirror / Atom feed
* livepatch-build-tools: fix section mismatch
@ 2019-04-01  2:28 Glenn Enright
  2019-04-12  1:21 ` Glenn Enright
  0 siblings, 1 reply; 3+ messages in thread
From: Glenn Enright @ 2019-04-01  2:28 UTC (permalink / raw)
  To: xen-devel; +Cc: ross.lagerwall, Konrad Rzeszutek Wilk

[-- Attachment #1: Type: text/plain, Size: 526 bytes --]

I hit an issue generating a livepatch for a recent xsa. I saw the 
following lines from the create-diff-object.log ...

/livepatch-build-tools/create-diff-object: ERROR: grant_table.o: 
kpatch_regenerate_special_section: 1162: group size mismatch for section 
.altinstructions

This looks really similar to the issue reported and fixed in 
https://github.com/dynup/kpatch/pull/528

The attached patch is based on that report, and resulted in a good 
livepatch. The alt section size in my case was actually 14.

Regards, Glenn

[-- Attachment #2: 00_fix_section_sizes.patch --]
[-- Type: text/x-patch, Size: 2407 bytes --]

diff --git a/create-diff-object.c b/create-diff-object.c
index 82f777e..f9f4abf 100644
--- a/create-diff-object.c
+++ b/create-diff-object.c
@@ -962,9 +962,35 @@ static int bug_frames_0_group_size(struct kpatch_elf *kelf, int offset) { return
 static int bug_frames_1_group_size(struct kpatch_elf *kelf, int offset) { return 8; }
 static int bug_frames_2_group_size(struct kpatch_elf *kelf, int offset) { return 8; }
 static int bug_frames_3_group_size(struct kpatch_elf *kelf, int offset) { return 16; }
-static int ex_table_group_size(struct kpatch_elf *kelf, int offset) { return 8; }
-static int altinstructions_group_size(struct kpatch_elf *kelf, int offset) { return 12; }
+int ex_table_group_size(struct kpatch_elf *kelf, int offset)
+{
+	static int size = 0;
+	char *str;
+
+	if (!size) {
+		str = getenv("EX_STRUCT_SIZE");
+		if (!str)
+			ERROR("EX_STRUCT_SIZE not set");
+		size = atoi(str);
+	}
+
+	return size;
+}
 
+int altinstructions_group_size(struct kpatch_elf *kelf, int offset)
+{
+	static int size = 0;
+	char *str;
+
+	if (!size) {
+		str = getenv("ALT_STRUCT_SIZE");
+		if (!str)
+			ERROR("ALT_STRUCT_SIZE not set");
+		size = atoi(str);
+	}
+
+	return size;
+}
 /*
  * The rela groups in the .fixup section vary in size.  The beginning of each
  * .fixup rela group is referenced by the .ex_table section. To find the size
diff --git a/livepatch-build b/livepatch-build
index c057fa1..6c3409c 100755
--- a/livepatch-build
+++ b/livepatch-build
@@ -304,6 +304,27 @@ if [ "${SKIP}" != "build" ]; then
         XEN_DEBUG="debug=$XEN_DEBUG"
     fi
 
+    echo "Reading special section data"
+    SPECIAL_VARS=$(readelf -wi "$XENSYMS" |
+        gawk --non-decimal-data '
+	BEGIN { a = e = 0 }
+	a == 0 && /DW_AT_name.* alt_instr$/ {a = 1; next}
+	e == 0 && /DW_AT_name.* exception_table_entry$/ {e = 1; next}
+	a == 1 {printf("export ALT_STRUCT_SIZE=%d\n", $4); a = 2}
+	e == 1 {printf("export EX_STRUCT_SIZE=%d\n", $4); e = 2}
+	a == 2 && b == 2 && p == 2 && e == 2 {exit}')
+
+    [[ -n $SPECIAL_VARS ]] && eval "$SPECIAL_VARS"
+
+    if [[ -z $ALT_STRUCT_SIZE ]] || [[ -z $EX_STRUCT_SIZE ]]; then
+	die "can't find special struct size"
+    fi
+    for i in $ALT_STRUCT_SIZE $EX_STRUCT_SIZE; do 
+	if [[ ! $i -gt 0 ]] || [[ ! $i -le 16 ]]; then
+		die "invalid special struct size $i"
+	fi
+    done
+
     echo "Perform full initial build with ${CPUS} CPU(s)..."
     build_full
 

[-- Attachment #3: Type: text/plain, Size: 157 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: livepatch-build-tools: fix section mismatch
  2019-04-01  2:28 livepatch-build-tools: fix section mismatch Glenn Enright
@ 2019-04-12  1:21 ` Glenn Enright
  2019-04-12  3:09   ` Konrad Rzeszutek Wilk
  0 siblings, 1 reply; 3+ messages in thread
From: Glenn Enright @ 2019-04-12  1:21 UTC (permalink / raw)
  To: xen-devel; +Cc: ross.lagerwall, Andrew Cooper, Konrad Rzeszutek Wilk

HI all

A quick bump on this, and added Andrew to the CC list since he appears 
to have looked at livepatch 'stuff' recently.

Was this patch of any interest at all? Or just wrong? After reading 
patch submission guidlines, should I resend this a different way?

Regards, Glenn

On 4/1/19 3:28 PM, Glenn Enright wrote:
> I hit an issue generating a livepatch for a recent xsa. I saw the 
> following lines from the create-diff-object.log ...
> 
> /livepatch-build-tools/create-diff-object: ERROR: grant_table.o: 
> kpatch_regenerate_special_section: 1162: group size mismatch for section 
> .altinstructions
> 
> This looks really similar to the issue reported and fixed in 
> https://github.com/dynup/kpatch/pull/528
> 
> The attached patch is based on that report, and resulted in a good 
> livepatch. The alt section size in my case was actually 14.
> 
> Regards, Glenn
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xenproject.org
> https://lists.xenproject.org/mailman/listinfo/xen-devel
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: livepatch-build-tools: fix section mismatch
  2019-04-12  1:21 ` Glenn Enright
@ 2019-04-12  3:09   ` Konrad Rzeszutek Wilk
  0 siblings, 0 replies; 3+ messages in thread
From: Konrad Rzeszutek Wilk @ 2019-04-12  3:09 UTC (permalink / raw)
  To: Glenn Enright; +Cc: ross.lagerwall, Andrew Cooper, xen-devel

On Fri, Apr 12, 2019 at 01:21:48PM +1200, Glenn Enright wrote:
> HI all
> 
> A quick bump on this, and added Andrew to the CC list since he appears to
> have looked at livepatch 'stuff' recently.
> 
> Was this patch of any interest at all? Or just wrong? After reading patch
> submission guidlines, should I resend this a different way?

What patch? Please send it to xen-devel mailing list and use git-send-email.

And also CC the maintainers -which are me and Ross.

Thanks.
> 
> Regards, Glenn
> 
> On 4/1/19 3:28 PM, Glenn Enright wrote:
> > I hit an issue generating a livepatch for a recent xsa. I saw the
> > following lines from the create-diff-object.log ...
> > 
> > /livepatch-build-tools/create-diff-object: ERROR: grant_table.o:
> > kpatch_regenerate_special_section: 1162: group size mismatch for section
> > .altinstructions
> > 
> > This looks really similar to the issue reported and fixed in
> > https://github.com/dynup/kpatch/pull/528
> > 
> > The attached patch is based on that report, and resulted in a good
> > livepatch. The alt section size in my case was actually 14.
> > 
> > Regards, Glenn
> > 
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xenproject.org
> > https://lists.xenproject.org/mailman/listinfo/xen-devel
> > 

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-04-12  3:09 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-01  2:28 livepatch-build-tools: fix section mismatch Glenn Enright
2019-04-12  1:21 ` Glenn Enright
2019-04-12  3:09   ` Konrad Rzeszutek Wilk

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.