[LG Stylo 2 Plus Questions & Answers] br0adband:
So here's the funny thing:

I have a MetroPCS Stylo 2 Plus, MS550, but I flashed the T-Mobile ROM to it in the recent past to make it the K550 and it works without any issues. Because I had to install TWRP to do that, it meant unlocking the bootloader which of course worked because I was then able to flash TWRP which then flashed the K550 ROM + SuperSU and so on and so forth. So at this moment it's got an unlocked bootloader, it's got TWRP on it, it's got the K550 ROM on it (meaning the 20a Nougat build), and it's also rooted.

But this morning I get the notice that an update is available from T-Mobile, apparently it's K55020b (as described here) and because I'm not sure how the hell that happened (given a rooted device is never supposed to get updates as I understand things) I'm wary of installing this update. Currently it hasn't even been downloaded and I'm not about to do that either considering that T-Mobile's recent actions with some other devices have not been favorable - they started permanently locking the bootloader on the LG V10 as I had one recently and the Nougat update would have done that but luckily runningnak3d was able to figure it out and released a modified update.zip that didn't have the bootloader update in it.

So now I have to wonder if that's going to happen with this 20b update which was apparently pushed out back on September 6th and I still have no idea how it ended up being available for this bootloader unlocked and rooted device of mine but I suppose that's a moot issue now.

Anyway, if anyone else has installed this 20b update can you report on whether or not it locked the bootloader again and potentially made it permanently locked or, should I consider this "safe" to install? I don't really care all that much about security updates honestly, especially not if they lock that bootloader permanently, that wouldn't be a good thing I suppose.

Any info is appreciated, thanks.

EDIT:

Ok so I went ahead and let it download the update.zip file, which I promptly copied out of the \cache directory and then deleted from that location so I could take a peek and it does indeed have a boot.img.p patch file so, something is changing there in that respect. Not sure what it is, not that familiar with editing the updater-script to bypass/skip that aspect entirely, here's what that code looks like:

getprop("ro.product.device") == "ph2n" || abort("E3004: This package is for \"ph2n\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Verifying current system...");
ui_print("Source: lge/ph2n_tmo_us/ph2n:7.0/NRD90U/1710715054f97:user/release-keys");
ui_print("Target: lge/ph2n_tmo_us/ph2n:7.0/NRD90U/172292106810a:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "lge/ph2n_tmo_us/ph2n:7.0/NRD90U/1710715054f97:user/release-keys" ||
getprop("ro.build.fingerprint") == "lge/ph2n_tmo_us/ph2n:7.0/NRD90U/172292106810a:user/release-keys" ||
abort("E3001: Package expects build fingerprint of lge/ph2n_tmo_us/ph2n:7.0/NRD90U/1710715054f97:user/release-keys or lge/ph2n_tmo_us/ph2n:7.0/NRD90U/172292106810a:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/boot:15532244:0e4c3deda33424438ca0563f5f870b3af0727855:15526100:e292f6eff4b17b5893106d34c4d6f105c714a8c4") || abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:15532244:0e4c3deda33424438ca0563f5f870b3af0727855:15526100:e292f6eff4b17b5893106d34c4d6f105c714a8c4\" has unexpected contents.");
ui_print("Skipping CacheFreeSpaceCheck for Block OTA...");

if get_stage("/dev/block/bootdevice/by-name/misc", "stage") == "" then
set_stage("/dev/block/bootdevice/by-name/misc", "S-0/3");
endif;

if get_stage("/dev/block/bootdevice/by-name/misc", "stage") == "S-0/3" then
ui_print("Step_S0/3");
if (range_sha1("/dev/block/bootdevice/by-name/system", "212,1,208,209,548,23788,31734,32418,32767,32768,32770,32977,32978,38444,38469,38836,38873,39291,65534,65536,65537,84144,98288,98302,98303,98304,98306,98513,98514,99026,100199,102090,102766,103860,106148,106167,106371,110709,118010,118076,119450,119900,120725,121051,122138,122140,122150,122158,122198,128871,128904,129773,130339,130809,130812,130833,130836,130849,131051,131061,131071,131072,131073,134065,134084,135086,135087,135410,135440,136158,136312,137055,137057,137735,137767,138305,138589,139111,163838,163840,163842,164049,164050,164562,166963,175322,189655,190088,195701,195914,196439,196446,196454,196606,196607,196608,196609,197121,202782,229376,229378,229585,229586,251484,262142,262144,262145,262657,266842,294912,294914,295121,295122,303738,317117,320726,327631,327680,327681,328193,360446,360448,360449,360961,362582,393216,393217,394272,394450,395968,425977,425984,425985,426497,458750,458752,458753,459265,491518,491520,491521,492033,497319,499911,524286,524288,524289,537345,557054,557056,557057,557569,589822,589824,589825,590337,622590,622592,622593,627250,630752,632860,655358,655360,655361,655873,688126,688128,688129,688641,720894,720896,720897,734267,753662,753664,753665,760306,786430,786432,786433,786945,819198,819200,819202,819409,819410,819922,819923,833199,833204,835511,845748,846651,849025,849027,849111,849147,849178,849179,849473,849481,849491,849500,849510,849519,849605,849610,849758,849759,856452,856459,863232") == "be3f124780ae1e46b2e7197c7252e935d3f9e80e" || block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block("/dev/block/bootdevice/by-name/system");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/system", "212,1,208,209,548,23788,31734,32418,32767,32768,32770,32977,32978,38444,38469,38836,38873,39291,65534,65536,65537,84144,98288,98302,98303,98304,98306,98513,98514,99026,100199,102090,102766,103860,106148,106167,106371,110709,118010,118076,119450,119900,120725,121051,122138,122140,122150,122158,122198,128871,128904,129773,130339,130809,130812,130833,130836,130849,131051,131061,131071,131072,131073,134065,134084,135086,135087,135410,135440,136158,136312,137055,137057,137735,137767,138305,138589,139111,163838,163840,163842,164049,164050,164562,166963,175322,189655,190088,195701,195914,196439,196446,196454,196606,196607,196608,196609,197121,202782,229376,229378,229585,229586,251484,262142,262144,262145,262657,266842,294912,294914,295121,295122,303738,317117,320726,327631,327680,327681,328193,360446,360448,360449,360961,362582,393216,393217,394272,394450,395968,425977,425984,425985,426497,458750,458752,458753,459265,491518,491520,491521,492033,497319,499911,524286,524288,524289,537345,557054,557056,557057,557569,589822,589824,589825,590337,622590,622592,622593,627250,630752,632860,655358,655360,655361,655873,688126,688128,688129,688641,720894,720896,720897,734267,753662,753664,753665,760306,786430,786432,786433,786945,819198,819200,819202,819409,819410,819922,819923,833199,833204,835511,845748,846651,849025,849027,849111,849147,849178,849179,849473,849481,849491,849500,849510,849519,849605,849610,849758,849759,856452,856459,863232") && block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat"), ui_print("system recovered successfully."), abort("E1004: system partition fails to recover"));
endif;
set_stage("/dev/block/bootdevice/by-name/misc", "S-1/3");
endif;

# ---- start making changes here ----

ui_print("Patching system image after verification.");
show_progress(0.900000, 0);
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
abort("E1001: Failed to update system image.");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
apply_patch("EMMC:/dev/block/bootdevice/by-name/boot:15532244:0e4c3deda33424438ca0563f5f870b3af0727855:15526100:e292f6eff4b17b5893106d34c4d6f105c714a8c4",
"-", e292f6eff4b17b5893106d34c4d6f105c714a8c4, 15526100,
0e4c3deda33424438ca0563f5f870b3af0727855,
package_extract_file("patch/boot.img.p")) ||
abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:15532244:0e4c3deda33424438ca0563f5f870b3af0727855:15526100:e292f6eff4b17b5893106d34c4d6f105c714a8c4");

if get_stage("/dev/block/bootdevice/by-name/misc", "stage") == "" then
set_stage("/dev/block/bootdevice/by-name/misc", "S-1/3");
endif;

ui_print("Writing radio image...");

if get_stage("/dev/block/bootdevice/by-name/misc", "stage") == "S-1/3" then

ui_print("Step_S1/3");
assert(lge.backupbootloader());

assert(lge.update_gpt());

set_stage("/dev/block/bootdevice/by-name/misc", "S-2/3");
endif;

if get_stage("/dev/block/bootdevice/by-name/misc", "stage") == "S-2/3" then
ui_print("Step_S2/3");
ui_print("package_extract_file factory - /dev/block/bootdevice/by-name/factory");
assert(package_extract_file("factory", "/dev/block/bootdevice/by-name/factory"));
ui_print("package_extract_file cmnlib - /dev/block/bootdevice/by-name/cmnlib");
assert(package_extract_file("cmnlib", "/dev/block/bootdevice/by-name/cmnlib"));
ui_print("package_extract_file tz - /dev/block/bootdevice/by-name/tz");
assert(package_extract_file("tz", "/dev/block/bootdevice/by-name/tz"));
ui_print("package_extract_file devcfg - /dev/block/bootdevice/by-name/devcfg");
assert(package_extract_file("devcfg", "/dev/block/bootdevice/by-name/devcfg"));
ui_print("package_extract_file sbl1 - /dev/block/bootdevice/by-name/sbl1");
assert(package_extract_file("sbl1", "/dev/block/bootdevice/by-name/sbl1"));
ui_print("package_extract_file lksecapp - /dev/block/bootdevice/by-name/lksecapp");
assert(package_extract_file("lksecapp", "/dev/block/bootdevice/by-name/lksecapp"));
ui_print("package_extract_file aboot - /dev/block/bootdevice/by-name/aboot");
assert(package_extract_file("aboot", "/dev/block/bootdevice/by-name/aboot"));
ui_print("package_extract_file rpm - /dev/block/bootdevice/by-name/rpm");
assert(package_extract_file("rpm", "/dev/block/bootdevice/by-name/rpm"));
ui_print("package_extract_file keymaster - /dev/block/bootdevice/by-name/keymaster");
assert(package_extract_file("keymaster", "/dev/block/bootdevice/by-name/keymaster"));
ui_print("package_extract_file sec - /dev/block/bootdevice/by-name/sec");
assert(package_extract_file("sec", "/dev/block/bootdevice/by-name/sec"));
ui_print("package_extract_file modem - /dev/block/bootdevice/by-name/modem");
assert(package_extract_file("modem", "/dev/block/bootdevice/by-name/modem"));
ui_print("package_extract_file laf - /dev/block/bootdevice/by-name/laf");
assert(package_extract_file("laf", "/dev/block/bootdevice/by-name/laf"));
ui_print("package_extract_file cmnlib64 - /dev/block/bootdevice/by-name/cmnlib64");
assert(package_extract_file("cmnlib64", "/dev/block/bootdevice/by-name/cmnlib64"));
ui_print("package_extract_file raw_resources - /dev/block/bootdevice/by-name/raw_resources");
assert(package_extract_file("raw_resources", "/dev/block/bootdevice/by-name/raw_resources"));
set_stage("/dev/block/bootdevice/by-name/misc", "S-3/3");
endif;

if get_stage("/dev/block/bootdevice/by-name/misc", "stage") == "S-3/3" then
ui_print("Step_S3/3");
assert(lge.recover_gpt());
endif;

set_progress(1.000000);

so maybe someone else can figure out how to edit it or modify it to prevent that from happening, but that's on the assumption that whatever the boot.img patch is doing is not a good thing to begin with and I'm not willing to experiment to that degree at the moment.